跳过不兼容的目录-GCC

时间:2018-12-07 11:24:06

标签: gcc ld

我正在尝试使用以下软件包中提供的一些库来编译脚本:

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

这是什么问题?为什么该库不兼容?为了避免这种情况,需要更改标志中的什么?我只想知道库是否有问题,那么我什么也做不了,或者我做错了什么。

任何帮助都很重要

1 个答案:

答案 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位的。