2013-01-07 292 views
0

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

当我试图建立我得到的错误:

 
$scons 

scons: Reading SConscript files ... 
scons: done reading SConscript files. 
scons: Building targets ... 

ld: warning: ignoring file /usr/xerces-c_2_8_0-x86-macosx-gcc_4_0/lib/libxerces-c.dylib, file was built for unsupported file format (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) which is not the architecture being linked (x86_64): /usr/xerces-c_2_8_0-x86-macosx-gcc_4_0/lib/libxerces-c.dylib 

ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 
scons: *** [wntevo] Error 1 
scons: building terminated because of errors. 

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

 
$file libxerces-c.28.0.dylib 
libxerces-c.28.0.dylib: Mach-O dynamically linked shared library i386 

我应该添加到我的SConstruct文件,以使它是在x86_64机器上的i386中构建的?

+5

scons不是C++编译器。 –

+0

如果您向我们展示SConsctruct,我们可以提供更好的帮助。听起来你正在试图编译一个64位库的32位应用程序。 – Brady

+0

我对scons的了解可以放在邮票上......但是我认为这里有一个makefile文件,你可以在其中指定标志并传递-m32(我认为...不要引用我。)会强制编译器进入32位模式,否则也许i386弓可以指定...类似的东西 –

回答

1

为了澄清,SCONS是而不是编译器它是一个构建工具。您正在使用SCons来调用编译器,并让SCons处理如何从正在编辑的源代码构建应用程序的细节。

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

我猜你的编译器是gcc,它需要标志-m32才能正确编译。要做到这一点,你可以告诉SCons把它告诉编译器。

在SConstruct文件的某处,您会发现创建Environment()或调用构建器的调用Program()如果您发现两者都需要更改用于创建该程序的环境。所以,如果你的代码说env = Environment(...)后来就env.Program(...)你想改变环境行添加这样的说法:

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

你调用该程序生成器这样的:

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

你需要将其更改为:

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

这种变化应该是可见的,当你运行SCons,就如你看到的参数G ++中的选项-m32。

作为一个侧面说明,以避免更多的混乱有关的编译器和构建工具,我建议你读了一些关于SCons的,一个良好的开端可能是the man pages

-1

这是我用来编译32位拱时我想在scons

env = Environment(TARGET_ARCH = 'x86')

+1

据我所知(和我写的代码),TARGET_ARCH目前只适用于Windows与Visual Studio而不是其他平台或编译器。由于作者正在询问如何构建MacOSX。这个答案是不正确的。 – bdbaddog