4

我有一个在 lxc 容器中运行的 i386 debian 系统。用户态是 32 位的,内核是 64 位的。因此 configure 检测到这一点:

checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu

可能这是取自uname -m的输出

我有一个用 gcc 构建的包,结果是一个正确的 32 位二进制文​​件。不幸的是,在另一个 c++ 项目中,我得到了这个:

configure:8595: checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries

从这里开始,链接器正在使用此开关,因此将尝试链接 64 位库而不是 32 位库,但它失败了:

/usr/bin/ld: skipping incompatible /usr/lib/libboost_program_options.so when searching for -lboost_program_options
/usr/bin/ld: skipping incompatible /usr/lib/libboost_program_options.a when searching for -lboost_program_options
/usr/bin/ld: cannot find -lboost_program_options
collect2: ld returned 1 exit status

虽然库 .so 文件是正确的 32 位 ELF:

file /usr/lib/libboost_program_options.so.*      
/usr/lib/libboost_program_options.so.1.42.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped

奇怪的是,配置对其他项目工作正常,并且正确检测到链接器以使用正确的拱门(elf_i386):

checking whether the gcc linker (/usr/bin/ld -m elf_i386) supports shared libraries... yes

有什么提示吗?

4

2 回答 2

2

我只是删除命令语法的未知数。问题是目标:/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/ 在配置文件中重新配置目标的想法?

这对我有用:

代替: ./configure --host=x86_64-unknown-linux-gnu --build=x86_64-unknown-linux-gnu \ --target=x86_64-unknown-linux-gnu --options...

经过: ./configure --host=x86_64-linux-gnu --build=x86_64-linux-gnu --options...

于 2016-06-30T14:23:52.730 回答
1

可能这是取自 uname -m 的输出

这个配置脚本显然很混乱。

为了不混淆它,请准确地告诉它想要它做什么:

./configure --host=i686-unknown-linux-gnu --build=i686-unknown-linux-gnu \
  --target=i686-unknown-linux-gnu
于 2012-10-11T01:44:24.763 回答