用scons编译器编译C++

compiling C++ with the scons compiler

本文关键字:C++ 编译 编译器 scons      更新时间:2023-10-16

我使用的是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')