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

时间:2010-05-13 18:41:59

标签: boost macos universal-binary

我想要一个Boost的静态通用二进制库。 (优选最新的稳定版本,即1.43.0或更新版本。)

我发现许多Google点击类似的问题和可能的解决方案。但是,他们中的大多数似乎已经过时了。也没有一个真正起作用。

现在,我正在尝试

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

编辑:似乎命令错了,我必须删除大多数选项的“ - ”。所以我现在正在尝试的命令( - 只是意味着重建所有):

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

这可能是我在构建Universal二进制文件时遇到的另一个问题:g++ on MacOSX doesn't work with -arch ppc64

3 个答案:

答案 0 :(得分:2)

我发现了问题。似乎MacOSX 10.4 SDK缺少GCC 4.2的一系列符号链接。

将此作为测试用例: g++ on MacOSX doesn't work with -arch ppc64

它将使用GCC 4.2报告多个错误(缺少C ++包含,缺少C包含,缺少libs)。在所有情况下,您都可以通过设置符号链接来解决这个问题。在SDK中搜索该文件,并按照与MacOSX 10.5 SDK中相同的方式设置符号链接。

之后,一切正常。

答案 1 :(得分:2)

我们在这里使用为10.4编译的Boost。我们不使用GCC 4.2,而是使用GCC 4.0,因为MacOS 10.4 SDK不支持Apple的GCC 4.2。要完成此任务,您需要一个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在编译时使用用户配置jam文件:

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

现在您不必弄乱系统SDK目录中的符号链接。

答案 2 :(得分:1)

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

  1. 从推特网站下载推文。

  2. 提取存档并cd进入boost_1_xx_0文件夹(其中xx是您正在使用的提升版本)。

  3. 执行命令

    ./bootstrap.sh然后

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

  4. 这将编译除Boost.MPI之外的所有内容(需要--with-mpi选项)。构建产品放在./stage