1

CまたはObjective-Cコードを含むいくつかの静的ライブラリ(MyLib、OtherLib)を作成していますが、各モジュールが静的ライブラリの名前にアクセスできるようにしたいと思います。

私はすることができます

const char* mylibname = "MyLib";

どこでも使用できます。ただし、すべてのライブラリの各ファイルが定数を介してそのライブラリにアクセスできる、より便利な方法が必要ですcurrentlibname。したがって、ファイルがMyLibにあるcurrentlibname場合、その値は「MyLib」であり、OtherLibにある場合、その値は「OtherLib」です。

最も便利なソリューションに関するアイデアはありますか?理想的には、宣言するものを含める以外にすべてのファイルを調整する必要なしに、すべての魔法を1か所にまとめる必要がありますmylibname

よろしく、ヨッヘン

4

1 に答える 1

2

それは明らかにオペレーティングシステム、コンパイラ、ビルダーに依存します。

Linuxにダイナミックライブラリがある場合は、実行時にいくつかの情報を取得できます。おそらく、スルー/proc/self/mapsおよび多分dladdr(そしておそらくリターンアドレスビルトイン)です。

私の提案は、各ライブラリの構築中にプリプロセッサシンボルを定義することです。おそらくCFLAGS += -DTHIS_LIBRARY_NAME=MyLib、あなたのようなものを使用しMakefileて、mylib.hそれを使用するものを使用します。mylib.hCIの場合は次のようなものを入れることを提案するかもしれません

#define QUOTE_NAME(N) #N
static inline const char *this_library_name () 
{ return QUOTE_NAME(THIS_LIBRARY_NAME); }

ところで、ライブラリのメインヘッダーファイルに含まれている一般的な単一のヘッダーファイルに上記のコードを入れることもできます。

しかし、私はあなたがそれを尋ねるのに少し驚いています。より良い方法は、ライブラリのバージョンにAPIを提供することです。gtkが機能テストについて何をするかを見てください。

于 2012-10-14T10:34:09.710 に答える