4

Cocoa ベースのユニバーサル ダイナミック ライブラリがあり、そこから機能をエクスポートしたいと考えています。エクスポート シンボル ファイルを使用しないと最新のものを実行できないようですが、これで問題ありません。「デフォルトでシンボルを非表示」(GCC_SYMBOLS_PRIVATE_EXTERN、-fvisibility=hidden) の設定はどこでも使用しません。この問題は、動的ライブラリから基本クラスをエクスポートしようとしたときに発生しました。具体的には、ライブラリに含まれていない派生クラスでそのメンバーを使用しようとしたときに、さらに具体的には 64 ビット ビルドで発生しました。 $_PluginBase.fConn" " 64 ビットの変更を認識しています: http://developer.apple.com/library/mac/#releasenotes/Cocoa/RN-ObjectiveC/_index.html、セクション「64 ビット クラスおよびインスタンス変数のアクセス制御」

そしてもちろん、_OBJC_IVAR_$_PluginBase.fConn をエクスポート ファイルに追加すれば、すべてが機能します...ただし、64 ビット ビルドの場合のみ、32 ビット ビルドはそのようなことを認識しません: "未定義シンボル: "_OBJC_IVAR_ $_PluginBase.fConn"、次から参照: -exported_symbol[s_list] コマンド ライン オプション"

唯一の解決策は別の回避策のようです: 2 つのエクスポート ファイルを用意することです。しかし・・・EXPORTED_SYMBOLS_FILEの設定:-Sに「ビルド設定条件追加」が使えません。

アイデアはありますか(パブリックアクセサーメソッドを使用する以外に)?

4

1 に答える 1

2

xcconfig ファイルを使用して、アーキテクチャ条件付きビルド設定を行うことができます。GUIからはできないようです。以下を含むビルド構成ファイルを作成します。

EXPORTED_SYMBOLS_FILE[arch=i386]=$(SRCROOT)/SymbolsList32Bit
EXPORTED_SYMBOLS_FILE[arch=x86_64]=$(SRCROOT)/SymbolsList64Bit

次に、プロジェクト設定で、そのファイルをプロジェクトのビルド構成に設定すると、準備完了です。(明らかに、パスがファイルを指すようにする必要がありますが、うまくいけばアイデアが得られます。)

それは私のために働いた。(FWIW MY_SETTING[sdk=iphoneos*]=FOO、MY_SETTING[sdk= mac ]=BAR など、SDK 名で条件付けすることもできます)

それが役立つことを願っています!

于 2011-12-23T20:10:38.687 に答える