4

サードパーティが Objective-C プラグインを作成できるようにするために、 Viennaの拡張に取り組んでいますが、64 ビット モードで実行している場合にのみランタイム リンカーの問題が発生します (32 ビット モードではすべて正常に動作するように見えます)。 . 私のプラグイン SynkPlugin は、Vienna.app の次のコードによって読み込まれます。

NSArray * bundlePaths = [NSBundle pathsForResourcesOfType:@"bundle" inDirectory:[[Preferences standardPreferences] pluginsFolder]];
NSEnumerator * enumerator = [bundlePaths objectEnumerator];
NSString * bundlePath;
NSMutableArray * plugins = [NSMutableArray array];
while ( (bundlePath = [enumerator nextObject]) != nil )
{
    NSBundle * pluginBundle = [NSBundle bundleWithPath:bundlePath];
    Class principalClass = [pluginBundle principalClass];
    id <ViennaPlugin, NSObject> plugin = [[principalClass alloc] init];
    [plugins addObject:plugin];
    [plugin release];
    NSLog(@"Loaded plugin %@ [main class: %@]", bundlePath, principalClass);
}

コンソール出力に、次のエラー メッセージが表示されます。

2010-07-09 08:55:40.128 Vienna[74065:a0f] Error loading /Users/dcrosta/Library/Application Support/Vienna/PlugIns/SynkPlugin.bundle/Contents/MacOS/SynkPlugin: dlopen(/Users/dcrosta/Library/Application Support/Vienna/PlugIns/SynkPlugin.bundle/Contents/MacOS/SynkPlugin, 265): Symbol not found: _OBJC_CLASS_$_Article
  Referenced from: /Users/dcrosta/Library/Application Support/Vienna/PlugIns/SynkPlugin.bundle/Contents/MacOS/SynkPlugin
  Expected in: flat namespace
  in /Users/dcrosta/Library/Application Support/Vienna/PlugIns/SynkPlugin.bundle/Contents/MacOS/SynkPlugin

このエラーは、32 ビット モードではなく、64 ビット モードで実行している場合にのみ発生します。Vienna と SynkPlugin はどちらも「標準の 32/64 ユニバーサル」設定でコンパイルされており、SynkPlugin には追加のリンカ フラグ「-undefined dynamic_lookup」があります。これらのクラスのコードを独自のバイナリにコンパイルします。

Stack Overflow でのこのエラーに関するその他の参照は、iPhone/iPod Touch と iPad の間の UIKit の違いに関係しています。これらの場合、実際にはフレームワークに iPhone/iPod Touch のクラスがありません。私の場合、Vienna.app は 32 ビット バージョンと同じコードから構築されているため、その中に Article クラスが含まれていることは確かです。

誰もこのようなエラーを見たことがありますか? 詳細情報をどこで探すべきかについて何か提案はありますか? ありがとう。

4

1 に答える 1

1

Vienna ターゲットのビルド設定のGCC 4.2 - コード生成で、デフォルトで非表示のシンボル( ) のチェックを外しGCC_SYMBOLS_PRIVATE_EXTERNます。

于 2010-07-09T14:46:52.097 に答える