我有一个GNU构建系统,包含autoconf-2.69,automake-1.14.1,libtool-2.4.2。我在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位库是我们想要的吗?
答案 0 :(得分:1)
似乎libtool使用" CC"," CXX"检查库搜索路径。将CC设置为" gcc -m32",然后将CXX设置为" g ++ -m32"后,它可以正常工作。所以libtool不会添加" -m32"即使我尝试在64位系统上构建32位程序也会自动执行。
答案 1 :(得分:0)
你被libtool .la
files expansion的问题所困扰。特别是libstdc++.la
正在扩展为完整路径,而不是简单的-lstdc++
。
我的建议是从您正在使用的SDK中删除.la
文件(/home/STools
)。这种方式libtool
无法为您承担任何责任。通常你在系统中的那些很好,因为库已经在搜索路径中,所以它不需要使用-rpath
或.so
文件的完整路径。
根据SDK的制作程度,这可能会也可能无法正常工作,所以请耐心等待。