我在64位Linux(RH6)上构建32位应用程序。
我检查联动期间链接器如何搜索库,并看到它被发现右32位库libz
但删除它,去进一步SEACH和被发现的64位版本的它:
3885956: trying file=/lib/libz.so.1 3885956: search cache=/etc/ld.so.cache 3885956: trying file=/lib64/libz.so.1
所有链接说后:
/usr/bin/ld: skipping incompatible /usr/lib64/libz.so when searching for -lz /usr/bin/ld: cannot find -lz collect2: ld returned 1 exit status
有人可以解释我为什么连接器做到这一点,以及如何强制它获得32位库?
Thsnks。64位Linux上的链接不正确
PS。 我使用-m32选项,但在这种情况下它不起作用。
UPDATE!看来调查转移到另一个领域 - 电气制造。如果我运行emake(原始目标案例),则失败。如果我复制粘贴执行命令哪个emake失败,然后构建成功完成。
因此怀疑上下文有所不同。
不知道如何调查
UPDATE2
这是自叹不如。 Electric Make只会从搜索路径(LD_LIBRARY_PATH)中删除/ usr/lib这样的常见库,并且仅使用Clearcase文件系统中的路径。如果它没有找到必要的库,它会得到ld的缓存并在那里搜索。遇到64位libz.so(geos首先在缓存文件中),它会停止搜索并返回错误。
显示您的确切命令行。 –
“我检查链接器是如何搜索”你是怎么做的?它看起来像'ld.so'可能做的,而不是'ld'。我的猜测是你错过了32位的-devel包。 –
只要确保gcc PATH是正确的。检查这篇文章 http:// stackoverflow。com/questions/3501878/force-gcc-to-compile-64位平台上的32位程序 – tan