当我尝试在本地计算机上编译项目的副本时,我收到一条错误消息,指出它正在跳过不兼容的库。当我正在处理服务器上托管的实时版本时,情况并非如此[它完全可以实现]。
各种其他网站让我相信这可能是一个环境问题,因为我正在开发64位的Ubuntu发行版,我假设服务器版本运行在32位。然而,在将我的环境变量设置为:
之后CFLAGS+=" -m32"
CXXFLAGS+=" -m32"
我仍然收到相同的编译错误:
/usr/bin/ld: skipping incompatible /dvlpmnt/libPI-Http.a when searching for -lPI-Http
可以使用haz教程吗?
== 修改 ==
当我遵循Jonathan的建议时,这是我收到的输出:
http.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
显然,这个库毕竟是32位的吗?
答案 0 :(得分:31)
该消息实际上并不是一个错误 - 它只是警告所讨论的文件不是正确的架构(例如32位与64位,错误的CPU架构)。链接器将继续寻找正确类型的库。
当然,如果您还遇到can't find lPI-Http
的错误,那么您就会遇到问题: - )
如果不了解构建系统和makefile的详细信息,很难说出确切的补救措施,但这里有几个黑暗的镜头:
CFLAGS
而不是。{
CTAGS
- 你确定这是
正确? (你所拥有的可能是正确的 - 这将取决于你的构建系统!)LDFLAGS
如果这没有帮助 - 您是否可以发布完整的错误输出,以及正在执行的实际命令(例如gcc foo.c -m32 -Dxxx
等)?
答案 1 :(得分:11)
通常情况下,这本身并不是错误;它是一个警告,它找到的第一个与编译器/链接器的-lPI-Http
参数匹配的文件无效。如果找不到具有正确内容的其他库,则会发生错误。
因此,您需要查看/dvlpmnt/libPI-Http.a
是否是32位目标文件或64位目标文件的库 - 如果您使用{{1进行编译,它可能是64位的}} 选项。然后,您需要确定在32位的其他位置是否存在备用-m32
或libPI-Http.a
文件。如果是,请确保包含它的目录列在链接器的libPI-Http.so
参数中。如果没有,那么您将需要从某个地方获取或构建32位版本的库。
要确定该库中的内容,您可能需要执行以下操作:
-L/some/where
“mkdir junk
cd junk
ar x /dvlpmnt/libPI-Http.a
file *.o
cd ..
rm -fr junk
”步骤告诉您归档中的目标文件类型。其余的只是确保你不会弄得一团糟,不能轻易清理。