我尝试用
制作图书馆ar -r -c -s libtestlib.a *.o
在本教程http://matrixprogramming.com/Tools/CompileLink.html
中给出但是在出现错误后链接到库
g++ -o uni2asc uni2asc.o -L../Modules -ltestlib
../Modules/libtestlib.a: could not read symbols: Archive has no index; run ranlib to add one
collect2: ld returned 1 exit status
我尝试使用ranlib,但仍然出现错误.. 我正在使用ubuntu9.10 请为我建议一些解决方案
答案 0 :(得分:22)
您的存档命令看起来很好,可以尝试以下操作。 1)获取存档/静态库中的目标文件
ar -t libtestlib.a
2)对于步骤1中的每个目标文件(例如foo.o)
file foo.o
这将告诉您目标文件的格式。如果为另一个平台编译了目标文件,则会导致无法为存档构建索引。 要纠正此问题,您需要重新编译这些文件 3)对于步骤1中的每个目标文件,执行
nm foo.o
这将列出从文件中导出的符号。
答案 1 :(得分:13)
当我收到错误时,我正在使用MinGW编译Windows应用程序,所以我找到了内置的MinGW命令:
i686-w64-mingw32-ar
并且
x86_64-w64-mingw32-ar
如果您在MinGW中遇到问题,请尝试使用这些代替ar
。他们都为我解决了这个问题。
答案 2 :(得分:2)
libtool
也有一个有用的选项:
-export-symbols-regexp
。
答案 3 :(得分:0)
我在尝试编译NBIS库时遇到了完全相同的问题。
有一个选项make install LIBNBIS=yes
创建包含其他存档文件的单个存档。 gcc链接器不能正常处理它,只是发出存档没有索引消息。解决方法是将存档保留为单独的文件
make install LIBNBIS=no
然后只需将应用程序链接到所需的存档即可。归档订阅源顺序非常重要,以确保链接器识别所需的依赖项,然后在处理.a文件时解析它们。