2011-01-19 19 views
0

IOSのxcodeを使用して静的ライブラリを作成しました。 C++では、他のプログラムからクラスを呼び出す必要がある場合は、クラスをエクスポートするために "__declspec(dllexport)"を追加する必要があります。 xcodeでは、エクスポートは必要ありません。ライブラリ内で他のプログラムに公開したい機能の呼び出しを防ぐ方法がありますか?静的ライブラリの関数の呼び出しを防止する

ありがとうございました。あなたは、デフォルトでは、あなたのコード内で定義されたシンボルのフレームワークやアプリケーションのXcodeを使用して、リンカの輸出のすべてを構築するとあなたのフレームワークインタフェース

をエクスポート

答えて

2

http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPFrameworks/Tasks/ExportingInterfaces.html

。シンボルが多い出荷用フレームワークでは、実行時にパフォーマンスの問題が発生する可能性があります。フレームワークがロードされると、ダイナミックリンクエディタはフレームワークに関連付けられたシンボルをロードします。フレームワークに多数のプライベート関数が含まれている場合、それらのプライベート関数のシンボルは使用されず、パブリック関数のシンボルと共にロードされます。これらの余分なシンボルをロードするだけでなく、メモリを浪費するだけでなく、シンボルルックアップ中にリストを移動するために多くの作業が必要になります。

Xcodeでは、リンカオプションでエクスポートファイルを指定することによって、実行可能ファイルによってエクスポートされるシンボルを制限できます。

アンエクスポートファイルをファイルあなたの輸出を作成

エクスポートするシンボルのリストを含む単純なテキストファイル(.txtまたはその他のテキストファイルの拡張子)です。ファイルを作成するには、新しい空のファイルをXcodeプロジェクトに追加します。このファイルに、エクスポートするシンボルのリストを1行に1つずつ追加します。

ANSI Cベースのコードでは、通常、シンボル名を取得するために関数または変数の名前にアンダースコアを前置することができます。変更されたシンボル名を使用するC++のような言語では、nmツールを実行して既存のシンボル名のリストを取得する必要があります。 nmを-gオプションで実行すると、現在エクスポートされているシンボルが表示されます。ツールの出力をコピーしてエクスポートファイルに貼り付けることで、無関係な情報を削除することができます。次のテキストは、NMによって生成されたCocoaフレームワークのためのいくつかのサンプル出力を示しています

_InitCocoaFW 
_addNumbers 
_getInitDate 

U .objc_class_name_NSDate 
b000ad54 T _InitCocoaFW 
b000aea8 T _addNumbers 
b000ade8 T _getInitDate 
U _objc_msgSend 

この出力で指定されたフレームワークの機能をエクスポートするには、このテキストを持つテキストファイルを作成します

関連する問題