OSX Snow Leopard: 为32位和64位构建boost 1.47.0

5

我要疯了...我目前正在尝试将我的项目中的boost从1.44.0升级到1.47.0,我的操作系统是osx snow leopard。- 我希望使用以下命令进行构建:

./b2 macosx-version=10.6 link=static address-model=32_64 threading=multi stage

我希望得到一个支持i386和x86_64的静态fat构建,但实际上并不是这样的。如果我查询生成的库的lipo-info,它们都是x86_64。有什么解决办法吗?可能是构建脚本出了问题吗?


我相信你需要明确指定 toolset=darwin;但是,为了进行健全性检查,请运行相同的 b2 调用加上 -n 参数,并发布编译器被调用的样例(具体来说,传递了哪些参数)。 - ildjarn
嗯,-n 参数好像没有起到作用,它应该是做什么的?Darwin 没有改变任何东西(我相信在 OSX 上它应该是默认选择),谢谢! - moka
“-n” 告诉 bjam/b2 输出编译器/链接器命令,但不实际执行它们。你的意思是说没有任何程序输出吗? - ildjarn
顺便说一句,我认为那看起来很好,但生成的库只有64位。老实说,这似乎是一个错误。 - moka
是的,我都试过了。- 嗯,这很奇怪,也许脚本出了问题?难道没有其他人尝试过吗? - moka
显示剩余4条评论
6个回答

2

我通过使用以下构建方式使其工作:

./b2 link=static threading=multi toolset=darwin cxxflags="-arch i386 -arch x86_64" macosx-version=10.6 stage


注:以上为技术相关内容,仅供参考。

2
这是我成功的做法。
./b2 link=static threading=multi toolset=darwin cxxflags="-arch i386 -arch x86_64" target-os=darwin address-model=32_64 stage

1
在MacOSX 10.6上构建Boost 1.49的Fat Binaries的唯一方法是同时使用architecture=x86和address-model=32_64这两个参数。

1

我尝试了许多选项,但没有一个能生成同时包含32位和64位架构的通用二进制文件。最终对我有效的是这个:

./b2 threading=multi toolset=darwin architecture=x86 target-os=darwin address-model=32_64 stage

这是在Mountain Lion上使用的boost 1.51.0。


0
你应该添加选项“架构”,例如:
./b2 macosx-version=10.6 link=static address-model=32_64 architecture=combined threading=multi stage

0

我在构建32/64位组合版本时遇到了问题,最终不得不分别构建这两个版本(我必须为32位构建添加cxx标志“-arch i386”),然后使用lipo将它们组合起来。例如:

./bjam link=static release install address-model=32 --prefix=$prefix_dir-x86" --python-buildid=2.7 python=2.7 --with-python cxxflags="-fPIC -Wfatal-errors -arch i386" -s NO_BZIP2=1 -s NO_ZLIB=1
./bjam link=static release install address-model=64 --prefix=$prefix_dir-x64" --python-buildid=2.7 python=2.7 --with-python cxxflags="-fPIC -Wfatal-errors" -s NO_BZIP2=1 -s NO_ZLIB=1
lipo $prefix_dir-x86/lib/libboost_python-2_7.a $prefix_dir-x64/lib/libboost_python-2_7.a -output $prefix_dir-universal/libboost_python-2_7.a -create

考虑到在加上"-arch i386"之前,当我请求 32 位时仍然得到了 64 位二进制文件,我怀疑 bjam/b2 在 MacOS 上构建 32 位二进制文件的脚本存在问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接