在编译时跳过不兼容的库

时间:2010-06-25 16:29:28

标签: c++ 64-bit compilation 32-bit conflicting-libraries

当我尝试在本地计算机上编译项目的副本时,我收到一条错误消息,指出它正在跳过不兼容的库。当我正在处理服务器上托管的实时版本时,情况并非如此[它完全可以实现]。

各种其他网站让我相信这可能是一个环境问题,因为我正在开发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位的吗?

2 个答案:

答案 0 :(得分:31)

该消息实际上并不是一个错误 - 它只是警告所讨论的文件不是正确的架构(例如32位与64位,错误的CPU架构)。链接器将继续寻找正确类型的库。

当然,如果您还遇到can't find lPI-Http的错误,那么您就会遇到问题: - )

如果不了解构建系统和makefile的详细信息,很难说出确切的补救措施,但这里有几个黑暗的镜头:

  1. 只是为了检查:通常你会添加 标志CFLAGS而不是。{ CTAGS - 你确定这是 正确? (你所拥有的可能是正确的 - 这将取决于你的构建系统!)
  2. 通常需要将标志传递给链接器 - 因此您可能还需要修改LDFLAGS
  3. 如果这没有帮助 - 您是否可以发布完整的错误输出,以及正在执行的实际命令(例如gcc foo.c -m32 -Dxxx等)?

答案 1 :(得分:11)

通常情况下,这本身并不是错误;它是一个警告,它找到的第一个与编译器/链接器的-lPI-Http参数匹配的文件无效。如果找不到具有正确内容的其他库,则会发生错误。

因此,您需要查看/dvlpmnt/libPI-Http.a是否是32位目标文件或64位目标文件的库 - 如果您使用{{1进行编译,它可能是64位的}} 选项。然后,您需要确定在32位的其他位置是否存在备用-m32libPI-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 ”步骤告诉您归档中的目标文件类型。其余的只是确保你不会弄得一团糟,不能轻易清理。