将Boost编译为静态通用二进制库

4
我希望获得一个静态的通用二进制库Boost。 (最好是最新的稳定版本1.43.0或更新版本)。
我搜索了很多与此类似的问题和可能的解决方案,但它们中的大多数都已经过时了。而且它们中没有一个真正起作用的。
现在,我正在尝试:
sudo ./bjam --toolset=darwin --link=static --threading=multi \
--architecture=combined --address-model=32_64 \
--macosx-version=10.4 --macosx-version-min=10.4 \
install

编译和安装都顺利完成。但是生成的二进制文件似乎有问题。

az@ip245 47 (openlierox) %file /usr/local/lib/libboost_signals.a
/usr/local/lib/libboost_signals.a: current ar archive random library

az@ip245 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

在构建通用二进制文件时,我可能会遇到另一个问题:MacOSX 上的 g++ 无法使用 -arch ppc64

3个回答

2

我们在工作中使用编译为10.4的Boost。但我们没有在其上使用GCC 4.2,而是使用了GCC 4.0,因为苹果的GCC 4.2不支持MacOS 10.4 SDK。为了实现这一点,您需要一个bjam用户配置文件,例如user-config-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在编译时使用用户配置的jam文件:

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

现在您不必在系统SDK目录中纠缠符号链接。

看我的回答。使它能够在GCC 4.2上运行的修复方法相当简单。而且完全有效。但无论如何,还是谢谢你提供的信息,这对我以后可能仍然有用。 - Albert
1
这个答案比在SDK上进行黑客攻击更好。 - paleozogt

2
我找到了问题所在。看起来 MacOSX 10.4 SDK 缺少一堆 GCC 4.2 的符号链接。
请使用此作为测试案例:MacOSX上的 g++ 在使用 -arch ppc64 选项时无法工作 它将报告多个 GCC 4.2 的错误(缺少 C++ 包含文件、缺少 C 包含文件、缺少库)。在所有情况下,您只需通过设置符号链接来修复它。在您的 SDK 中搜索该文件,然后以与 MacOSX 10.5 SDK 相同的方式设置符号链接。
之后,一切都可以正常工作。

1

在OSX 10.6上构建4路通用增强静态二进制文件,我执行以下操作:

  1. 从boost网站下载boost。

  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-version设置为10.4。 - paleozogt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接