4

我想要一个 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

编辑:似乎命令是错误的,我必须删除大多数选项的“--”。所以我现在正在尝试的命令(-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

4

3 回答 3

2

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

将此用作测试用例: MacOSX 上的 g++ 不适用于 -arch ppc64

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

在那之后,这一切都奏效了。

于 2010-05-13T23:57:58.277 回答
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 目录中的符号链接。

于 2010-05-14T00:16:49.497 回答
1

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

  1. 从 boost 网站下载 boost。

  2. 将存档和 cd 解压缩到 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

于 2011-02-04T03:48:23.380 回答