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