1

まず、MAC OS X 10.6 で Xcode 3.2.5 を使用しています。

正常にビルドおよび実行される Cocoa アプリケーション プロジェクトがあります。このプロジェクトには、次を使用してエクスポートする関数がいくつかあります。

#define CORE_EXPORT __attribute__ ((visibility ("default")))

extern "C" {
    CORE_EXPORT IUIEventHandler* GetIUIEventHandler();  
}

エクスポートされた GetIUIEventHandler 関数を使用できるように、別の動的ライブラリ プロジェクトを元の Cocoa アプリケーションにリンクできるようにしたい場合は、どうすればよいですか?

元の Cocoa アプリケーションを動的ライブラリとしてもビルドする必要がありますか? または、Cocoa アプリケーションの実行可能ファイルをリンクする方法はありますか?

4

2 に答える 2

0

この答えはちょっと汚いですが、うまくいきます。メインアプリの実行可能ファイルから関数をインポートする必要があるライブラリでリンカーフラグ -undefined dynamic_lookup を使用しましたが、インポートする必要がある関数を保持するライブラリにはリンクしません。

これにより、リンカーは未定義のシンボルを気にせず、ロード時にリンクする必要があるものとしてマークするように強制されます。アプリが -undefined dynamic_lookup でビルドされたライブラリをロードすると、未定義のシンボル自体がリンクされます。

これが私の答えを見つけた場所です: http://lists.apple.com/archives/xcode-users/2008/Dec/msg00002.html

于 2011-07-28T18:53:13.557 に答える
0

1 つの Xcode プロジェクトは、複数のターゲットで構成されています。各ターゲットは製品を生産します。製品は、アプリケーションや共有ライブラリのようなものです。

プロジェクト内の各ファイルは、0 個以上のターゲットに属することができますが、通常は 1 つに属します。

プロジェクトを再編成して、1 つは共有ライブラリまたはフレームワーク、もう 1 つはアプリケーションという 2 つのターゲットを持つようにします。

おそらく、フレームワークには多くの一般的なコードが含まれ、アプリにはアプリケーション固有の概念のみが含まれることになります。これには通常、コードを明確にし、適切な抽象化を維持するのに役立つという副作用があります。多くのプロジェクトは、フレームワークが 1 つのクライアントによってのみ使用される場合でも、このように構成されているため、フレームワークが導くクリーンな設計の利点を得ることができます。

于 2011-07-27T17:08:19.423 に答える