问题标签 [unix-ar]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
static-linking - MinGW-w64 的 ar.exe 在尝试构建静态库时找不到库
几天来,我一直试图让 MinGW-w64 在我的系统上工作,主要是因为它有更新的 GCC 版本,但我要么设置错误,要么 MinGW-w64 本身存在一些奇怪的问题。
我现在已经下载了i686-w64-mingw32-gcc-4.7.2-release-win32_rubenvb,将其解压缩C:/Dev/mingw-ruben
并添加C:/Dev/mingw-ruben/bin
到 $PATH 环境变量的路径。
我正在尝试构建的是带有 CMake 文件的SFML 2 。运行 CMake 会正常工作,编译器会被识别并通过所有测试。CMake 还会ar.exe
在C:/Dev/mingw-ruben/bin
文件夹中找到 。生成 MinGW Makefile 后,我切换到 Windows 命令行并运行mingw32-make install
. 问题出在哪里,我收到错误消息:
或者对于网络库
错误似乎很明显,检查时确实没有libopengl32.a
或libws2_32.a
in mingw-ruben/lib/
,但文件实际上位于C:/Dev/mingw-ruben/i686-w64-mingw32/lib
.
现在我如何告诉 ar/make/cmake 不仅在mingw-ruben/lib
目录中搜索,而且在mingw-ruben/i686-w64-mingw32/lib
?
i686-w64-mingw32
将所有内容从子文件夹复制到mingw-ruben
根文件夹是个好主意吗?
附带说明:我可以mingw32-make install
再次调用,该过程将继续,但在尝试将我的应用程序与 SFML 链接时,我遇到了许多glXYZ
来自 SFML 的函数的未解决符号错误。
更多信息:我使用的是 Windows 8 x64,但我认为这并不重要,是的,我尝试过 MSYS,但它不能解决我的任何问题。
难道我做错了什么?我必须专门配置东西吗?
c++ - 试图合并两个静态库
我有一个问题,我想要一个我的代码的静态库,因为我经常使用这些代码。它是 c++(否则共享将是另一种选择)。但是该代码取决于其他静态库。因此,我发现我无法将静态库链接到另一个库。我找到了如何将两个“ar”静态库合并为一个。因此,我尝试了一个测试,但它不起作用,我想知道为什么以及如何正确地做。
我有两个静态库,每个库都有一个标头(未链接但用于实现),它的源具有一个简单的函数返回一些东西。Lib1 有一个函数,lib2 有一个依赖于 lib1 的函数,如果我链接 lib1 和 lib2,我的可执行文件 3.exe 会出现链接错误。lib1 的函数未引用。使用链接的内容,我自己编写了一个批处理脚本,它提取库的所有对象并快速将其添加到输出库中:
script.bat libtest1.a libtest2.a
它的输出看起来很可靠:
我链接到输出而不是 lib1 和 lib2,但仍然未引用 lib1 的功能。
那么该怎么办 ?我不想一直包含整个代码。
c - 用 C 读/写文件
我正在用 C 编写一个程序,它基本上为给定的文件名列表创建一个存档文件。ar
这与linux中的命令非常相似。这是存档文件的样子:
但是我在尝试从档案中提取文件时遇到了困难。假设用户想要提取file1.txt
. 这个想法是它应该获取文件名的索引/位置(在本例中为 file1.txt),跳过 58 个字符以到达文件的内容,读取内容,并将其写入新文件。所以这是我的问题:
1) 如何获取存档文件中文件名的索引/位置?请注意,不允许有重复的文件名,所以我不必担心有两个不同的问题。
2)读取文件时如何跳过几个字符(在本例中为 58)?
3)我怎样才能确定文件内容何时结束?即我需要它来阅读内容并在file2.txt/
标题之前停止。
autotools - Autotools:从不同编译的源创建静态库
我正在尝试从多个来源构建一个静态库。问题是对于某些来源,我必须使用不同的CFLAGS
.
一开始我想创建几个,最后在usingnoinst_LIBRARIES
中将它们组合成一个。这种方法失败了,因为没有办法在不提取静态库的情况下组合使用它们。lib_LIBRARIES
LIBADD
ar
这是我Makefile.am
目前的样子:
我已经考虑过AR
用一个ar
包装器代替,它首先提取库,然后将它们组合到final.a
. 但是我不喜欢这种方法,那么有没有正确的方法来实现呢?
x86 - 如何解决 Windows 上的 GHC 错误“Unknown PEi386 section name `.idata$4'”?
我最近发现我编写的在 Windows 上编译 HDBC-postgresql 的指令不再适用于 Haskell 平台 2012.2.0.0。该库构建正常,但是在尝试链接构建的库时,cabal
失败并显示:
我尝试使用 重新制作libpq.a
,dlltool --no-idata4 --no-idata5
但随后错误消息更改为Unknown PEi386 section name `.idata$7'
.
这似乎是GHC 错误 7103。
根据PE 和 COFF 规范,美元符号包含在部分名称中时具有特殊含义,表示“分组部分”。链接器应该丢弃 "$" 和它后面的所有字符以创建一个合并的.idata
部分,其中 "$" 后面的字符用于确定对合并部分的贡献的顺序。
有没有办法强制dlltool
不输出分组部分?
或者,有没有办法获取 GNU 存档(A 文件),合并所有分组的部分,并输出生成的合并导入库(imlib)?
编辑: Haskell Platform 2012.4.0.0 也会发生同样的错误。
EDIT2查看的源代码后dlltool
,似乎没有办法强制它不输出分组部分。此外,我还没有找到一个现成的实用程序,它将合并目标文件中的分组部分。
出于赏金和这个问题的目的,我将其更改为:如何在.idata
给定模块定义 (DEF) 文件的情况下构造单个部分。
gcc - 内存与 ld 和 ar 命令重叠
我用这个命令链接了一些文本文件:
ld -r -b 二进制 -o resources1.o *.txt
我得到一个包含以下内容的文件resources.o:
纳米资源1.o
我有来自另一个 ld 命令的其他 resources2.o 文件,但它有不同的内容:
我想将这两个 resources.o 文件合并到一个 libSum.a 文件中。所以我使用这个命令:
ar rvs libSum.a 资源1.o 资源2.o
当我将 libSum.a 链接到我的 C 程序并尝试使用这些文本时,我不能因为它们共享相同的内存偏移量。所以二进制__textos1_texto1_txt_start 与 _binary_texto4_txt_start (0X00000000) 具有相同的方向。
如何将两个资源文件合并到一个 .a lib 中以避免内存偏移重叠?谢谢
cmake - 在 Beagleboard 上编译 - 在 AR 上失败
我正在 Beagleboard-Xm 内核上编译:
我现在尝试用 CMake 编译一个静态库,一切正常,直到涉及到库的链接:
在我的“ar --help”中打印相同的东西。
有没有办法让链接在板上运行?可能是什么问题?
其他一些系统版本:
c - 在链接描述文件中提取存档文件
我正在尝试处理如下问题:
假设我有一个库 libxyz.a 创建自:
编译和存档:
我如何编写链接描述文件才能将 abc.o 准确地放在预期的位置?
我试图以这种方式处理它:
但运行后:
我得到:
我在论坛的链接器文件中找不到任何提取档案的示例。我唯一找到的是链接器的文档,它只包含有关archive:file
构造的信息。
android - Android:将静态库合并为一个
我使用 Android NDK r8 生成多个包含 $(BUILD_STATIC_LIBRARY) 的静态库,并成功获得:lib1.a、lib2.a、lib3.a 等。
现在我想将这些静态库合并为一个。
我尝试使用来自 Android NDK 的 ar.exe 来实现:
但是当我在 Android NDK makefile 中使用libAll.a时,它会说没有索引。
如何添加此索引?
其他问题:
当我显示归档libAll.a的内容时,我看到的是 lib1.a、lib2.a、lib3.a而不是这些库中的.o符号。
如何更改它(= 从静态库中提取 .o 以将其合并到 libAll.a 中)?
谢谢
c - Using fwrite to store an ar_hdr struct to a file
I'm working on a problem to create my own C version of unix ar. Right now I'm trying to create the header and write it to the file.
Initially, I used a stat struct and printed the contents using an fprintf. However, when I try to use the ar command on a file printed with such a method, it does not work. I was told that the better solution would be to use an fwrite to write the struct directly to the file. So I'm now trying to implement that.
I've tried to populate then fwrite my ar_hdr struct with the stat info, however when I write to the file, I get garbage.
Update 2: using just an fprintf based upon @fvu's recommendations. Last item on fprintf is the constant ARFMAG from ar.h which I believe is the same as printing the two characters.
The test output of my program is now something like this:
When I try the unix command: ar -tv myfile.a
result is: Inappropriate file type or format
If I use nano to look at test.a this is the result
There's a weird shift@ symbol before the first header. Here's my code to write the overall file header, any hints would be appreciated.
Adding results from od -x file | head -n 2: