无法读取符号:存档没有索引; 运行ranlib添加一个

ind*_*ndu 25 gcc

我试着用图书馆制作

ar -r -c -s libtestlib.a *.o
Run Code Online (Sandbox Code Playgroud)

如本教程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
Run Code Online (Sandbox Code Playgroud)

我尝试使用ranlib但仍然出现错误..我正在使用ubuntu9.10请为我建议一些解决方案

Jas*_*eet 23

您的存档命令看起来很好,您可以尝试以下方法.1)获取存档/静态库中的目标文件

ar -t libtestlib.a
Run Code Online (Sandbox Code Playgroud)

2)对于步骤1中的每个目标文件(例如foo.o)

file foo.o 
Run Code Online (Sandbox Code Playgroud)

这将告诉您目标文件的格式.如果为另一个平台编译了目标文件,则会导致无法为存档构建索引.要更正此问题,您需要重新编译这些文件.
3)对于步骤1中的每个目标文件,执行

nm foo.o
Run Code Online (Sandbox Code Playgroud)

这将列出从文件导出的符号.


小智 15

当我收到错误时,我正在使用MinGW编译Windows应用程序,所以我找到了内置的MinGW命令:

i686-w64-mingw32-ar
Run Code Online (Sandbox Code Playgroud)

x86_64-w64-mingw32-ar
Run Code Online (Sandbox Code Playgroud)

ar如果您在MinGW中遇到问题,请尝试使用它们.他们都为我解决了问题的问题.

  • 如何在`./configure`中指定AR? (2认同)
  • 您应该能够在shell的命令行中将其指定为环境变量,例如`AR = x86_64-w64-mingw32-ar./ configure`. (2认同)