Domanda

Non credo che la mia domanda qui è stato risposto già qui. Così qui è, Ho una libreria statica che io sostengo e aggiornare periodicamente. Ho anche aggiornare il numero di versione in modo corretto. Ora la mia domanda che utilizza questo link must libreria per esattamente la stessa versione della libreria e non a quelli più anziani o più recente. Una cosa che ho provato è stato quello di utilizzare macro predefinite nel file di librerie di intestazione e controllare nella mia applicazione. Ha funzionato, ma in questo modo si può garantire solo i file header corretti. C'è qualche tecnica in modo che il collegamento avrà esito negativo se è la libreria sbagliato ?? Mi auguro che la questione è un po 'chiara.

Hari

È stato utile?

Soluzione

Non sono sicuro che ve lo consiglio, ma ...

L'intestazione potrebbe includere:

#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.

L'utente del codice scrive in termini di nomi di funzione non decorati (lib_functionA), mentre garantisce l'intestazione che il corretto suffisso versione viene aggiunto.

Non necessariamente modificare ogni funzione; si ha bisogno per garantire che qualche funzione che sarà sempre utilizzato è ornato con il numero di versione. Se v'è una funzione di inizializzazione (lib_init(), forse), quindi utilizzare tale. Si potrebbe fare ad una variabile; la parte difficile allora è garantire che la variabile viene fatto riferimento in ciascun programma.

Si noti che è più usuale per garantire che l'interfaccia a una biblioteca rimane invariato tra le versioni in modo che i programmi possono essere collegati con qualsiasi versione senza bisogno di compilazione.

Altri suggerimenti

Tutto ciò che serve è un simbolo unico correlato al numero di versione, ad esempio:

int version_1_1_5=0;

in biblioteca e un certo uso di esso nella domanda, ad esempio:

extern int version_1_1_5; //decl
int *p = &version_1_1_5;  // use
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top