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

将Boost编译为静态通用二进制库,boost,macos,universal-binary,Boost,Macos,Universal Binary,我想要一个Boost的静态通用二进制库。(最好是最新的稳定版本,即1.43.0或更新版本。) 我发现很多谷歌搜索结果都有类似的问题和可能的解决方案。然而,其中大多数似乎已经过时。而且它们都没有真正起作用 现在,我正在努力 sudo ./bjam --toolset=darwin --link=static --threading=multi \ --architecture=combined --address-model=32_64 \ --macosx-version=10.4 --maco

我想要一个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只是重建所有对象的方法):

然而,这会产生许多奇怪的错误(我之前已经有过),都是这样的:

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 10.4 SDK似乎缺少GCC 4.2的一系列符号链接

将此用作测试用例:

<>它将报告GCC 4.2的多个错误(缺少C++,缺少C包含,缺少LIBs)。在所有情况下,您都可以通过设置符号链接来修复此问题。在SDK中搜索该文件,只需按照MacOSX 10.5 SDK中的相同方式设置符号链接


在那之后,一切都正常了。

我们在这里使用为10.4编译的Boost。不过,我们没有在其上使用GCC4.2,而是使用GCC4.0,因为MacOS 10.4 SDK不支持苹果的GCC4.2。要实现这一点,您需要一个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>"" ; 

现在,您不必乱用system SDK目录中的符号链接。

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

  • 从boost网站下载boost

  • 将归档文件和cd解压缩到boost_1_xx_0文件夹中(其中xx是您正在使用的boost版本)

  • 运行:

    /bootstrap.sh
    然后

    /bjam macosx version=10.6 macosx version min=10.4体系结构=组合线程=多链路=静态地址模型=32_64


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

    查看我的答案。使其与GCC4.2一起工作的修复相当简单。而且效果很好。但无论如何,谢谢你提供的信息,这可能在以后的某个时候对我仍然有用。这个答案比在SDK上破解要好。以这种方式生成的二进制文件不会在10.4上运行。macosx版本必须设置为10.4
    # 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 --user-config=user-config-darwin.jam ... (your other options go here) ...