我有一个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制作的好坏,这可能会或可能不会正确工作,所以请对此持保留态度。