配置无法在具有32位用户空间的64位系统上检测到正确的ld

时间:2012-10-10 21:27:33

标签: gcc linker g++ 32bit-64bit autoconf

我有一个在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位lib而不是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

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

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

任何提示?

2 个答案:

答案 0 :(得分:2)

我只是删除了未知的命令语法。 问题是目标:urn:oasis:names:tc:xacml:2.0:context:schema:os 想要在conf flie中重新配置目标吗?

这对我有用:

替换: XNamespace ns = "urn:oasis:names:tc:xacml:2.0:context:schema:os"; var id = "urn:oasis:names:tc:xacml:1.0:action:action-id"; var value = (string) doc.Descendants(ns + "Attribute") .Where(x => (string)x.Attribute("AttributeId") == id) .Elements(ns + "AttributeValue") .Single();

通过: /usr/local/libexec/gcc/x86_64-unknown-linux-gnu/

答案 1 :(得分:1)

  

可能这是取自uname -m

的输出

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

要解除混淆,请告诉它完全您希望它做什么:

./configure --host=i686-unknown-linux-gnu --build=i686-unknown-linux-gnu \
  --target=i686-unknown-linux-gnu