我有一个在 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
有什么提示吗?