2010-05-13 56 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