2010-12-20 22 views
3

Ich denke nicht, dass meine Frage hier bereits hier beantwortet wurde. Also hier ist es, Ich habe eine statische Bibliothek, die ich regelmäßig pflegen und aktualisieren. Ich aktualisiere auch die Versionsnummer korrekt. Jetzt muss meine Anwendung, die diese Bibliothek verwendet, mit genau derselben Version der Bibliothek und nicht mit den älteren oder neueren Bibliotheken verbunden sein. Eine Sache, die ich versuchte, war, vordefinierte Makros in der Headerdatei der Bibliotheken zu verwenden und es in meiner Anwendung zu überprüfen. Es hat funktioniert, aber auf diese Weise können Sie nur die korrekten Header-Dateien sicherstellen. Gibt es eine Technik, so dass die Verknüpfung fehlschlägt, wenn es die falsche Bibliothek ist? Ich hoffe, die Frage ist etwas klar.Verknüpfen mit der richtigen Bibliothek

Hari

+0

Vergessen Sie nicht, die Antwort zu akzeptieren, die Sie für am nützlichsten halten. Das ist das Häkchen, das Sie unter der Antwort sehen. Sie sollten das für alle Ihre Fragen tun, wo Sie eine oder mehrere hilfreiche Antworten erhalten haben (eine Auswahl pro Frage). –

Antwort

0

Ich bin mir nicht sicher, ob ich es empfehlen würde, aber ...

Der Header cou ld umfassen:

#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); 

Etc.

Der Benutzer des Codes schreibt in Bezug auf die nicht ergänzten Funktionsnamen (lib_functionA), während der Header stellt sicher, dass die richtige Version Suffix angehängt wird.

Sie müssen nicht unbedingt jede Funktion ändern; Sie müssen sicherstellen, dass eine Funktion, die immer verwendet wird, mit der Versionsnummer versehen ist. Wenn es eine Initialisierungsfunktion gibt (zB lib_init()), dann verwenden Sie diese. Du könntest es zu einer Variablen machen; Der schwierige Teil stellt dann sicher, dass die Variable in jedem Programm referenziert wird.

Beachten Sie, dass es üblicher ist, sicherzustellen, dass die Schnittstelle zu einer Bibliothek in Versionen unverändert bleibt, sodass Programme mit jeder Version verknüpft werden können, ohne dass eine Kompilierung erforderlich ist.

+0

danke allen. Jonathan, die von dir erwähnte Methode scheint die bessere zu sein. Vielen Dank Jonathan. – Hari

2

Alles, was Sie brauchen, ist ein einzigartiges Symbol der Versionsnummer beispielsweise bezogen werden:

int version_1_1_5=0; 

in der Bibliothek und einige Verwendung in der Anwendung, zum Beispiel:

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

Die Schwierigkeit besteht darin sicherzustellen, dass der Benutzer immer auf die Versionsvariable verweist. Der Header könnte so etwas wie folgt ausführen: 'static const int * lib_version = & lib_version_1_1_5;' Damit jede Objektdatei, die den Header enthält, auf die Bibliotheksversion verweist, mit der sie kompiliert wurde. –

Verwandte Themen