跳过不兼容的目录 - gcc

Skipping incompatible directory - gcc

我正在尝试使用包中可用的一些库来编译脚本,使用:

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

这里有什么问题?为什么这个库不兼容?需要在标志中更改什么以避免这种情况?我只想知道这是否是库的问题,然后我无能为力,或者我是否做错了什么。

感谢任何帮助

/home/yuki/sac/lib/libsacio.a 是为架构构建的 与您尝试 link 该程序的不兼容。 最可能的原因是该库包含 32 位目标文件和 您正在尝试 64 位 linkage。下一个最有可能的是 64 位库 在 32 位 linkage.

如果您 cd 进入您 运行 这个 link 年龄和 运行 的目录:

$ 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:

这些告诉您您尝试 link 的体系结构的名称( 您系统的体系结构)及其目标文件格式的名称。

如果你也运行:

$ objdump -f /home/yuki/sac/lib/libsacio.a

您将在 archive /home/yuki/sac/lib/libsacio.a,你会看到架构 这些目标文件的文件格式与您的系统不匹配。

您需要找到并使用为相同架构构建的 libsacio.a 作为您的系统 - 如果您的系统是 64 位,则很可能是 64 位库;一个 32 位 如果您的系统是 32 位,则库。