当我尝试构建32位程序时,libtool会选择64位库



我有一个autoconf-2.69, automake-1.14.1, libtool-2.4.2的GNU构建系统。我在x86_64 RHEL6主机操作系统上配置了——host=i686-linux来构建32位程序。libtool命令应该是:

/bin/sh ../libtool  --tag=CXX   --mode=link g++ -I/home/STools/RLX/boost/include/boost-1_44  -m32 -g3 -Wall -static  -o engine engine-main.o ../components/librlxvm.la /home/STools/RLX/boost/include/boost-1_44/../../lib/libboost_program_options-gcc42-mt-1_44.a  -lz -lpthread -ldl  -lrt -ldl -lz -lm

但是真正的命令是搜索64位库,而不是32位库,如下所示:

libtool: link: g++ -I/home/STools/RLX/boost/include/boost-1_44 -m32 -g3 -Wall -o engine engine-main.o  -L/home/robert_bu/src/gcc/gcc-4.2.2/build-x86_64/x86_64-unknown-linux-gnu/libstdc++-v3/src -L/home/robert_bu/src/gcc/gcc-4.2.2/build-x86_64/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs -L/home/robert_bu/src/gcc/gcc-4.2.2/build-x86_64/./gcc ../components/.libs/librlxvm.a /home/STools/RLX/boost/include/boost-1_44/../../lib/libboost_program_options-gcc42-mt-1_44.a /home/STools/RLX/gcc-4.2.2-x86_64/lib/../lib64/libstdc++.so -L/lib/../lib64 -L/usr/lib/../lib64 -lc -lgcc_s -lrt -ldl -lz -lm -pthread -Wl,-rpath -Wl,/home/STools/RLX/gcc-4.2.2-x86_64/lib/../lib64 -Wl,-rpath -Wl,/home/STools/RLX/gcc-4.2.2-x86_64/lib/../lib64

——host配置似乎没有效果。有没有办法告诉libtool 32位库是我们想要的?

似乎libtool使用"CC", "CXX"来检查库搜索路径。在我将CC设置为"gcc -m32"后,将CXX设置为"g++ -m32",它就可以工作了。因此,即使我尝试在64位系统上构建32位程序,libtool也不会自动添加"-m32"。

您遇到了libtool .la文件扩展的问题。特别是libstdc++.la正在为您扩展到一个完整的路径,而不是简单的-lstdc++

我的建议是从你正在使用的SDK中删除.la文件(/home/STools)。这样libtool就不能替你做假设了。通常您在系统中拥有的库是好的,因为库已经在搜索路径中,所以它不需要使用-rpath.so文件的完整路径。

根据SDK制作的好坏,这可能会或可能不会正确工作,所以请对此持保留态度。

最新更新