0

我正在使用 Mac OS X 10.8.2,并且正在使用 scons 编译器编译我的代码。我正在使用 32 位 xerces-c 数据库版本 2.8.0。

当我尝试构建时出现错误:

$scons

scons: 读取 SConscript 文件...
scons: 读完 SConscript 文件。
scons:建立目标......

ld:警告:忽略文件/usr/xerces-c_2_8_0-x86-macosx-gcc_4_0/lib/libxerces-c.dylib,文件是为不受支持的文件格式构建的(0xce 0xfa 0xed 0xfe 0x 7 0x 0 0x 0 0x 0 0x 3 0x 0 0x 0 0x 0 0x 6 0x 0 0x 0 0x 0 )不是被链接的架构(x86_64):/usr/xerces-c_2_8_0-x86-macosx-gcc_4_0/lib/libxerces-c.dylib

ld:未找到架构 x86_64 的符号
collect2: ld 返回 1 个退出状态
scons: *** [wntevo] 错误 1
scons:建筑因错误而终止。

我检查了我的 libxerces-c.28.0.dylib 文件:

$file libxerces-c.28.0.dylib
libxerces-c.28.0.dylib:Mach-O 动态链接共享库 i386

我应该在我的 SConstruct 文件中添加什么以使其在 x86_64 机器上的 i386 中构建?

4

2 回答 2

1

澄清一下,SCons不是编译器,而是构建工具。您正在使用 SCons 来调用编译器,并且您让 SCons 负责如何从您正在编辑的源代码构建应用程序的细节。

您现在的问题是 SCons 无法为您提供详细信息。您需要告诉 SCons 创建一个可以编译 32 位应用程序的环境。这是通过将 a 标志传递给编译器来完成的,编译器指示它编译 32 位应用程序。

我猜你的编译器是 gcc,它需要标志 -m32 才能正确编译。为此,您可以告诉 SCons 将其告诉编译器。

在 SConstruct 文件中的某处,您会找到创建Environment()或调用构建器的调用。Program()如果两者都找到,则您希望更改用于创建程序的环境。因此,如果您的代码说env = Environment(...)稍后env.Program(...)您想更改 Environment 行以添加此参数:

env = Environment(...other arguments..., CPPFLAGS=["-m32"])

你像这样调用程序生成器:

Program(...0 or more arguments...)

您需要将其更改为:

Program(...0 or more arguments..., CPPFLAGS=["-m32"])

当您运行 SCons 时,此更改应该是可见的,因为您应该在 g++ 的参数中看到选项 -m32。

作为旁注,为了防止对编译器和构建工具产生更多混淆,我建议您阅读一些关于 SCons 的内容,一个好的开始可能是手册页

于 2013-01-31T08:42:51.783 回答
-1

当我想在 scons 中编译时,这就是我用来在 32 位架构上编译的东西

env = Environment(TARGET_ARCH = 'x86')

于 2013-02-26T20:07:25.143 回答