2010-05-13 77 views
4

我想要Boost的靜態通用二進制庫。 (最好是最新的穩定版本,也就是1.43.0或更新版本。)將Boost編譯爲靜態通用二進制庫

我發現了很多類似的問題和可能的解決方案。但是,他們大多數似乎過時了。也沒有人真的有效。

現在,我想

sudo ./bjam --toolset=darwin --link=static --threading=multi \ 
--architecture=combined --address-model=32_64 \ 
--macosx-version=10.4 --macosx-version-min=10.4 \ 
install 

,編譯和安裝罰款。但是,生成的二進制文件似乎已破解。

[email protected] 47 (openlierox) %file /usr/local/lib/libboost_signals.a 
/usr/local/lib/libboost_signals.a: current ar archive random library 

[email protected] 49 (openlierox) %lipo -info /usr/local/lib/libboost_signals.a 
input file /usr/local/lib/libboost_signals.a is not a fat file 
Non-fat file: /usr/local/lib/libboost_signals.a is architecture: x86_64 

編輯:看起來命令是錯誤的,我必須刪除大多數選項的「 - 」。所以,我現在想的命令(-a只是意味着重建所有):

sudo ./bjam -a toolset=darwin link=static threading=multi \ 
architecture=combined address-model=32_64 \ 
macosx-version=10.4 macosx-version-min=10.4 \ 
install 

然而,這給了許多奇怪的錯誤(我已經早些時候曾),所有這樣的:

darwin.compile.c++.pch bin.v2/libs/math/build/darwin-4.2.1/release/address-model-32_64/architecture-combined/link-static/macosx-version-min-10.4/macosx-version-10.4/threading-multi/../src/tr1/pch.hpp.gch 
In file included from ./boost/math/special_functions/acosh.hpp:18, 
       from ./boost/math/special_functions.hpp:15, 
       from libs/math/build/../src/tr1/pch.hpp:9: 
./boost/config/no_tr1/cmath.hpp:21:19: error: cmath: No such file or directory 

這可能是我在構建通用二進制文件時遇到的另一個問題:g++ on MacOSX doesn't work with -arch ppc64

回答

2

我發現了這個問題。似乎MacOSX 10.4 SDK缺少GCC 4.2的一系列符號鏈接。

使用此作爲測試用例: g++ on MacOSX doesn't work with -arch ppc64

它將與GCC 4.2報告多個錯誤(缺少C++包括,缺失C包括,缺少庫)。在任何情況下,您都可以通過設置符號鏈接來解決這個問題。在您的SDK中搜索文件,只需按照MacOSX 10.5 SDK中的相同方式設置符號鏈接即可。

之後,這一切工作。

2

我們在工作中使用了爲10.4編譯的Boost。我們不使用GCC 4.2,而是使用GCC 4.0,因爲Apple的GCC 4.2不支持MacOS 10.4 SDK。要完成這個,你需要一個bjam用戶配置文件,例如。用戶配置 - darwin.jam。這是我們的內容。修改你的心臟的內容:

# Boost.Build Configuration 

    # Compiler configuration 
using darwin : 8.11 : /usr/bin/g++-4.0 : 
    <architecture>"combined" 
    <address-model>"32" # this can be changed to 32_64 for 32/64 universal builds 
    <macosx-version>"10.4" 
    <macosx-version-min>"10.4" 
# <root>"/Developer" 
    <compileflags>"" 
    <linkflags>"" ; 

然後,你需要告訴的bjam使用的用戶配置果醬文件進行編譯時:

bjam --user-config=user-config-darwin.jam ... (your other options go here) ... 

現在,你不必惹系統中的符號鏈接SDK目錄。

+0

看到我的答案。使它與GCC 4.2一起工作的修復很容易。並且工作得很好。但是,無論如何感謝您的信息,這在稍後的時間對我來說可能仍然有用。 – Albert 2010-05-14 00:56:05

+1

這個答案比在SDK上黑客更好。 – paleozogt 2011-02-21 17:41:01

1

要建立在OSX 10.6 4路通用升壓靜態二進制文件我執行以下操作:從提升網站

  1. 下載的推動作用。

  2. 將解壓縮文件解壓縮並放入boost_1_xx_0文件夾(其中xx是您正在使用的boost版本)。

  3. 運行:

    ./bootstrap.sh然後

    ./bjam macosx-version=10.6 macosx-version-min=10.4 architecture=combined threading=multi link=static address-model=32_64

這將編譯除了Boost.MPI(這需要--with-MPI選項)的一切。建立產品得到放在./stage

+1

這種方式生成的二進制文件不能在10.4上運行。 macosx版本必須設置爲10.4 – paleozogt 2011-02-21 17:37:38