我正在尝试使用以下软件包中提供的一些库来编译脚本:
gcc -g -o sac2mt5 sac2mt5.o libsac2mt5.a -L/home/yuki/sac/lib -lsacio -lm
这是我得到的错误:
/usr/bin/ld: skipping incompatible /home/yuki/sac/lib/libsacio.a when searching for -lsacio
/usr/bin/ld: cannot find -lsacio
collect2: error: ld returned 1 exit status
这是什么问题?为什么该库不兼容?为了避免这种情况,需要更改标志中的什么?我只想知道库是否有问题,那么我什么也做不了,或者我做错了什么。
任何帮助都很重要
答案 0 :(得分:2)
/home/yuki/sac/lib/libsacio.a
库是为体系结构构建的
与您尝试为其链接程序的程序不兼容。
最可能的原因是该库包含32位目标文件,并且
您正在尝试64位链接。下一个最可能的是64位库
在32位链接中。
如果您cd
到运行此链接并运行的目录:
$ objdump -f sac2mt5.o
输出将包含以下形式的行:
sac2mt5.o: file format <...>
architecture: <...>, flags 0x<...>:
例如(64位ELF):
sac2mt5.o: file format elf64-x86-64
architecture: i386:x86-64, flags 0x00000010:
或(32位ELF):
sac2mt5.o: file format elf32-i386
architecture: i386, flags 0x00000010:
这些告诉您您要链接的架构的名称( 系统的体系结构)及其目标文件格式的名称。
如果您还运行:
$ objdump -f /home/yuki/sac/lib/libsacio.a
您将在目录中看到每个目标文件的相应信息。
存档/home/yuki/sac/lib/libsacio.a
,您将看到该架构
这些目标文件的文件格式与您的系统不匹配。
您需要找到并使用为同一体系结构构建的libsacio.a
作为您的系统-如果您的系统是64位,则很可能是64位库; 32位
库,如果您的系统是32位的。