gpt4 book ai didi

c++ - 如何使 Boost dylibs 在 os x 上通用(i386 和 x86_64)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:10:50 24 4
gpt4 key购买 nike

我正在尝试将 Boost 库编译成通用二进制文件(即包含 i386 和 x86_64 架构构建的“胖”文件)。

破坏互联网和 SO我组装了以下说明。

  1. 下载 boost (例如来自 http://www.boost.org/users/download/ )

  2. 在下载的文件夹中,输入./bootstrap.sh(或者,在我的例子中 ./bootstrap.sh --with-libraries=thread,因为我只需要线程库)

  3. 键入 ./b2 install cxxflags="-arch i386 -arch x86"

这些步骤将 Boost 线程库安装到 /usr/local/lib/(它的标准位置)。生成的静态库是一个通用二进制文件。到目前为止,还不错。

$ lipo -i /usr/local/lib/libboost_thread.a
Architectures in the fat file: /usr/local/lib/libboost_thread.a are: i386 x86_64

然而,动态库似乎只是为 x86_64 编译的。

$ lipo -i /usr/local/lib/libboost_thread.dylib
Non-fat file: /usr/local/lib/libboost_thread.dylib is architecture: x86_64

我希望 .dylib 也具有通用性。有谁知道我如何为 i386 和 x86_64 编译它?

最佳答案

我也在纠结这个问题。技巧似乎有两个方面。

  1. 您需要使用不同的工具集 来构建i386 .dylib。 clang 将构建一个 x86_64 .dylib,无论我尝试了什么,但是具有正确标志的 darwin 将构建一个 i386 .dylib
  2. 构建两次,一次用于 i386,一次用于 x86_64;然后使用 lipo 将结果组合成一个“胖”.dylib

这是我快速拼凑起来的可重复获得“胖”.dylib 的内容。在 universal/中找到您需要的那些。静态“胖”.a 库留在 stage/lib/中。

rm -rf i386 x86_64 universal
./bootstrap.sh --with-toolset=clang --with-libraries=filesystem
./b2 toolset=darwin -j8 address-model=32 architecture=x86 -a
mkdir -p i386 && cp stage/lib/*.dylib i386
./b2 toolset=clang -j8 cxxflags="-arch i386 -arch x86_64" -a
mkdir x86_64 && cp stage/lib/*.dylib x86_64
mkdir universal
for dylib in i386/*; do
lipo -create -arch i386 $dylib -arch x86_64 x86_64/$(basename $dylib) -output universal/$(basename $dylib);
done

一行:

rm -rf i386 x86_64 universal &&  ./bootstrap.sh --with-toolset=clang --with-libraries=filesystem && ./b2 toolset=darwin -j8 address-model=32 architecture=x86 -a && mkdir -p i386 && cp stage/lib/*.dylib i386 && ./b2 toolset=clang -j8 cxxflags="-arch i386 -arch x86_64" -a && mkdir x86_64 && cp stage/lib/*.dylib x86_64 && mkdir universal && for dylib in i386/*; do lipo -create -arch i386 $dylib -arch x86_64 x86_64/$(basename $dylib) -output universal/$(basename $dylib); done

关于c++ - 如何使 Boost dylibs 在 os x 上通用(i386 和 x86_64)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19897761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com