iPhoneアプリケーションで使用するためのスタティックライブラリを作成しています。シンボルをエクスポートしない数多くのソースファイルが含まれています。クラスの静的インスタンスをインスタンス化するだけで、コンストラクタでコードを実行し、さまざまなものを集中管理クラスに登録します。これは、コードが標準のiPhoneアプリケーションの一部として構築されている場合には問題ありませんが、静的ライブラリに分割されている場合、これらのファイルは最終アプリケーションバイナリにはなりません。したがって、これは問題を引き起こします。静的ライブラリビルドと最終的なアプリケーションビルドの両方で、デッドストリップなどのすべてのビルドオプションを無効にしました。シンボル(GCC/iPhone)をエクスポートしない静的ライブラリオブジェクトファイルを強制的に挿入する
Metrowerksコンパイラでこの問題が発生しましたが、そのインスタンスでは、コードが中間ライブラリなしで単一のアプリケーションに組み込まれていても発生していました。解決策はかなり簡単でした。プライベートクラスのインスタンスに__declspec(force_export)
を使用するだけで、すべてがうまくいきます。
GCC/iPhoneに相当するものはありますか?私はGCC 4.2でXcode 3.1.4を使用し、iPhone OS 3.1をターゲットにしています。あるいは、明示的に参照されているかどうかにかかわらず、アプリケーションに静的ライブラリ内のすべてのオブジェクトファイルをリンクするように指示する方法がありますか? ar
を使用して、オブジェクトファイルの完全なセットがスタティックライブラリに入っていることを確認しました。
ありがとうございます。
素晴らしい!それはまさに必要なものでした:-)。 –