用scons编译器编译C++
compiling C++ with the scons compiler
我使用的是Mac OS X 10.8.2,我使用scons编译器编译代码。我使用的是32位xerces-c数据库版本2.8.0。
当我试图构建时,我会遇到错误:
$烤饼scons:正在读取SConscript文件。。。scons:已完成对SConscript文件的读取。烤饼:建筑目标。。。ld:警告:忽略文件/usr/xerces-c_2_8_0-x86-macosx-gcc_4_0/lib/libxerces-c.dylib,该文件是为不受支持的文件格式(0xce 0xfa 0xed 0xfe 0x7 0x0 0x0 0x3 0x0 0x 0 0x 6 0x0 0x00x0(构建的,该文件不是要链接的体系结构(x86_64(:/usr/xerces-c2_8_0-x86-macosx-gcc_4_0/lib/libxerces-c-dylibld:找不到体系结构x86_64的符号collect2:ld返回1退出状态scons:***[wntevo]错误1scons:由于错误,构建已终止。
我检查了我的libxerces-c.28.0.dylib文件:
$file libxerces-c.28.0.dyliblibxerces-c.28.0.dylib:Mach-O动态链接共享库i386
我应该向SConstruct文件添加什么,使其在x86_64计算机上的i386中构建?
为了澄清,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的内容,一个好的开始可能是手册页
当我想在scons 中编译时,这是我用来在32位arch上编译的
env = Environment(TARGET_ARCH = 'x86')