私は他の iOS 開発者向けのフレームワークを開発しており、boost を依存関係として使用しています。arm6、arm7、arm7s、arm64、i386、および x86_64 用のライブラリ (fat ライブラリ) を含む boost.framework を作成しています。コンパイルとリンクは正常に機能しているように見えますが、私のライブラリと XCode 5.0.2 の boost.framework をシミュレーターで使用すると、次のエラーが発生します。
Detected an attempt to call a symbol in system libraries that is not present on the iPhone:
pthread_cond_init$UNIX2003 called from function _ZN5boost18condition_variableC2Ev
ただし、アプリをデバイスに展開しても、まったく問題は発生しません。
周りを見回した後、彼の関数名が OSX ライブラリの一部であることを説明するStackOverflow エントリを見つけました。$UNIX2003
それに基づいて、ライブラリのリンクを確認しましたが、ライブラリの i386 部分のみがパーツに対してリンクされてい$UNIX2003
ます (これは、Apple 自身の説明に従っています)。arm* アーキテクチャは、サフィックスのないバージョンを使用しています。
私の質問は、シミュレーターで実行するにはどうすればよいですか? 特定のフラグを指定してブーストを再コンパイルする必要がありますか? シミュレーターにシャットダウンを指示するオプションはありますか? または、シミュレーターに i386 ではなく実際のデバイス ライブラリを使用するように指示する方法はありますか?
これらの$UNIX2003
関数を自分で作成して、実際の関数に委譲する可能性があります。しかし、かなりの数の関数呼び出しがあるので、特に私のフレームワークを使用している開発者が同じことをする必要があるので、私はそれをしたくありません (私は避けたいと思います)。