我有一个在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
任何提示?
答案 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