3

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

ハリ

4

2 に答える 2

2

必要なのは、バージョン番号に関連する一意のシンボルだけです。たとえば、次のようになります。

int version_1_1_5=0;

ライブラリで使用し、アプリケーションで使用します。たとえば、次のようになります。

extern int version_1_1_5; //decl
int *p = &version_1_1_5;  // use
于 2010-12-20T07:40:03.377 に答える
0

おすすめできるかはわかりませんが…

ヘッダーには次のものを含めることができます。

#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()、おそらく) がある場合は、それを使用します。変数に対して行うことができます。難しい部分は、変数が各プログラムで参照されるようにすることです。

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

于 2010-12-20T07:59:27.030 に答える