【问题标题】:compile Boost as static Universal binary lib将 Boost 编译为静态通用二进制库
【发布时间】:2010-05-13 18:41:59
【问题描述】:

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

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

【问题讨论】:

    标签: boost macos universal-binary


    【解决方案1】:

    我发现了问题。 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,因为 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 目录中的符号链接了。

      【讨论】:

      • 看我的回答。使它与 GCC 4.2 一起工作的修复相当容易。并且工作得很好。不过还是感谢您提供的信息,这可能在以后对我有用。
      • 这个答案比在 SDK 上破解要好。
      【解决方案3】:

      要在 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

      【讨论】:

      • 以这种方式生成的二进制文件无法在 10.4 上运行。 macosx-version 必须设置为 10.4
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      相关资源
      最近更新 更多