2010-12-20 8 views
3

私の質問はここですでに答えられているとは思えません。だからここには、 私は私が維持し、定期的に更新する静的ライブラリがあります。私もバージョン番号を正しく更新します。今このライブラリを使用している私のアプリケーションは、ライブラリの同じバージョンにリンクする必要があり、古いものや新しいものにリンクする必要はありません。私が試したことの一つは、ライブラリヘッダファイルにあらかじめ定義されたマクロを使用し、アプリケーションでチェックすることでした。それはうまくいきましたが、その方法では正しいヘッダーファイルしか保証できません。 リンクが間違ったライブラリである場合、リンクが失敗するような技術はありますか?私はその質問がいくぶん明確であることを願っています。正しいライブラリにリンクする

ハリ

+0

最も役立つと思われる答えを受け入れることを忘れないでください。それは答えのスコアの下に表示されるチェックマークです。 1つ以上の有益な回答(質問ごとに1つの選択肢)を受け取ったすべての質問に対して、それを行う必要があります。 –

答えて

0

私はそれをお勧めするとは思わないが...

ヘッダーcou LDは:

#define LIB_VERSION_SUFFIX _3_17 

#define LIB_PASTER(x, y) x ## y 
#define LIB_EVALUATOR(x, y) LIB_PASTER(x, y) 
#define LIB_FUNCTION(x)  LIB_EVALUATOR(x, LIB_VERSION_SUFFIX) 

#define lib_functionA LIB_FUNCTION(lib_functionA) 

extern int lib_functionA(const char *, int); 

ヘッダが正しいバージョンサフィックスが付加されることを保証しながら、コードのユーザーは、非装飾関数名(lib_functionA)の点で書き込みます。

必ずしもすべての機能を変更する必要はありません。常に使用される一部の機能にバージョン番号が付いていることを確認する必要があります。初期化関数(lib_init()、おそらく)がある場合は、それを使用してください。あなたはそれを変数にすることができます。ハードパートは、変数が各プログラムで参照されるようにします。

コンパイルを必要とせずにプログラムを任意のバージョンにリンクできるように、ライブラリへのインターフェイスがバージョン間で変更されないようにするのがより一般的です。

+0

ありがとうございます。ジョナサン、あなたが言及した方法は、より良いようです。 Jonathanに非常に感謝します。 – Hari

2

必要なのは、例えば、バージョン番号に関連するユニークなシンボルです:ライブラリと例のためのアプリケーションでは、その一部を使用、中

int version_1_1_5=0; 

extern int version_1_1_5; //decl 
int *p = &version_1_1_5; // use 
+0

ここでの難しさは、ユーザーが常にバージョン変数を参照することです。ヘッダーは、 'static const int * lib_version =&lib_version_1_1_5;'のようになります。ヘッダを含む各オブジェクトファイルは、コンパイルされたライブラリのバージョンを参照します。 –

関連する問題