11

このスクリプトを使用して、いくつかのBoostライブラリをコンパイルし、OS X、iOS、および iOS シミュレーターで使用するためのフレームワークを作成することに成功しました: Peter Goodliffe の作品 ( http://goodliffe.blogspot.com/2010/09/building-boost-framework-for-ios-iphone.html )に基づいています。Boost 1.53.0では、clang を使用し、libc++ にリンクしています。

Boost 1.54.0を使用して iOS シミュレーター用にコンパイルすると、スクリプトは次のエラーで失敗します: /bin/sh: line 1: -ftemplate-depth-128: command not found.

私はかなり掘り下げましたが、ここに私が知っていることがあります:

  • boost.sh では、iOS シミュレーターの bjam とコンパイラ オプションに「-arch i386」が含まれています。
  • Boost 1.54.0 のリリース ノートには、「Boost は 80386 ターゲット CPU をサポートしなくなりました」と記載されています。
  • Boost 1.53.0 は、同じスクリプトを使用して、OS X、iOS、および iOS シミュレーターで正常にコンパイルされるようです。
  • Boost 1.54.0 は、同じスクリプトを使用して OS X と iOS 自体で正常にコンパイルされるようです

これが私が知っていると思うことです:

  • "-d13" を bjam に渡す (デバッグ情報を生成する) 場合、iOS シミュレーターのビルド時に変数 "CONFIG_COMMAND" が設定されていないように見えます。他の構成では、この変数は clang へのパスに設定され、コンパイラ オプションが含まれます。シミュレーターの場合、bjam がこの変数を使用してコンパイラーを実行しようとすると、代わりにテンプレートの深さで始まるいくつかの追加オプションを実行するため、上記のエラーにつながると思われる空です。そのため、CONFIG_COMMAND 変数が適切に設定されていないようで、エラーが発生しています。

「-d13」フラグで生成された残りの 100 MB 以上の出力を選別するために Boost ビルド システムについて十分な知識がないため、設定されていない理由がわかりません。「-arch i386」オプションとの非互換性は、1.54.0 で導入されたものと思われます。これを「-arch i486」および「-arch x86_32」に変更しようとしましたが、同じ問題が発生します。

他の誰かがこれで成功しましたか? Boost.Log を使用したいので、これを試みています。

4

4 に答える 4

4

少し前に、boost 1.53.0 と 1.54.0 の間のすべての jam ファイルの差分を読んで、これを理解しました。これは大変な作業でした。パッチを投稿するつもりだったのですが、原因を見つけるだけで時間がかかり、それが何だったのか思い出せません。

いずれにせよ、前に進んで締め切りに間に合わせるために使用したクイックフィックスを覚えています。ブースト 1.54.0 の場合、bjam に「toolset=darwin-[version]~iphonesim」引数を指定します。arm builds toolset=darwin-[version]~iphone を指定することもできますが、必要ありません。

たとえば、iOS 6.1 SDK を使用すると、次のようになります。

./b2 toolset=darwin-6.1~iphonesim architecture=x86 target-os=iphone macosx-version=iphonesim-6.1 link=static variant=debug  define=BOOST_TEST_NO_MAIN define=BOOST_TEST_ALTERNATIVE_INIT_API linkflags="-stdlib=libc++" -j2 -d+2 -sICU_PATH=/usr/local/icu --without-python --layout=tagged --build-dir="/Users/wix/Desktop/boost_1_54_0/_build/simd_build" --stagedir="/Users/wix/Desktop/boost_1_54_0/_build/simd_stage" --debug-configuration stage

これでうまくいかない場合はお知らせください。時間があれば、バックアップから古いビルドディレクトリを取得して、他に何かしたことがあるかどうかを確認します。上記のコマンドは、私の histfile からのものです。

また、参考までに、同様にビルドされた ICU ライブラリを使用して v7 および v7 のみをターゲットとするアーム ビルドの ICU チェック パスを作成するには、tools/build/v2/tools/darwin.jam に次のパッチを適用します。

460,464c460,465
<             if $(instruction-set) {
<                 options = -arch$(_)$(instruction-set) ;
<             } else {
<                 options = -arch arm ;
<             }
---
>             #if $(instruction-set) {
>             #    options = -arch$(_)$(instruction-set) ;
>             #} else {
>             #    options = -arch arm ;
>             #}
>       options = -arch armv7 ;

また、より一般的には、~/user-config.jam に次のようなものが必要になる場合があります。

using clang : : : <cxxflags>"-std=c++11 -stdlib=libc++" <linkflags>"-stdlib=libc++" ;

using darwin : 6.1~iphone
   : /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch armv7 -arch armv7s -fvisibility=hidden -fvisibility-inlines-hidden -std=c++11 -stdlib=libc++ -miphoneos-version-min=5.1 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk
   : <striper> <root>/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
   : <architecture>arm <target-os>iphone
   ;

using darwin : 6.1~iphonesim
   : /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch i386 -fvisibility=hidden -fvisibility-inlines-hidden -std=c++11 -stdlib=libc++ -miphoneos-version-min=5.1 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk
   : <striper> <root>/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
   : <architecture>x86 <target-os>iphone
   ;

また、boost::context をシミュレーター用に正しくビルドするには、libs/context/build/Jamfile.v2 に以下を追加する必要がありました。

alias asm_context_sources
   : asm/make_i386_sysv_macho_gas.S
     asm/jump_i386_sysv_macho_gas.S
   : <address-model>32
     <architecture>x86
     <binary-format>mach-o
     <target-os>iphone
     <toolset>darwin
   ;
于 2013-08-28T18:46:23.670 に答える
4

この投稿の回答と他の人が作成したスクリプトに基づいて、Xcode 5 を使用して iOS および OSX 用のブースト フレームワークを構築する bash スクリプトをまとめました。つまり、armv7、armv7s、arm64、i386、および x86_64 用です。

ここで確認してくださいhttps://github.com/mgrebenets/boost-xcode5-iosx

1.49.0からブーストが構築されることは確かです

于 2013-12-23T00:44:11.093 に答える