GNU/Linux >> Linux Esercitazione >  >> Linux

Come incorporare le informazioni sulla versione nella libreria condivisa e nel binario?

Per estendere la risposta di @sashang, evitando i problemi "$Id:$" menzionati da @cdunn2001, ...

Puoi aggiungere un file "version_info.h" al tuo progetto che contiene solo:

#define VERSION_MAJOR "1"
#define VERSION_MINOR "0"
#define VERSION_PATCH "0"
#define VERSION_BUILD "0"

E nel tuo file main.c c'è la riga:

static char version[] = VERSION_MAJOR "." VERSION_MINOR "." VERSION_PATCH "." VERSION_BUILD;
static char timestamp[] = __DATE__ " " __TIME__;

(o comunque tu voglia usare questi valori nel tuo programma)

Quindi imposta un passaggio di pre-compilazione che legge il file version_info.h, aumenta i numeri in modo appropriato e lo riscrive di nuovo. Una build giornaliera aumenterebbe solo il numero VERSION_BUILD, mentre una versione più seria aumenterebbe altri numeri.

Se il tuo makefile lo elenca nell'elenco dei prerequisiti del tuo oggetto, la build ricompilerà ciò di cui ha bisogno.


I compilatori Intel Fortran e C++ possono certamente farlo, usa -sox opzione. Quindi, sì, c'è un modo. Non conosco alcuna convenzione diffusa per l'incorporamento di tali informazioni in un file binario e generalmente utilizzo Emacs in modalità esadecimale per leggere le informazioni incorporate, il che è piuttosto hacker.

'-sox' incorpora anche le opzioni del compilatore utilizzate per creare un eseguibile, il che è molto utile.


Un modo per farlo se usi cvs o subversion è avere una stringa id speciale formattata appositamente nel tuo file sorgente. Quindi aggiungi un hook pre-commit a cvs o svn che aggiorna quella variabile speciale con la nuova versione del file quando viene eseguito il commit di una modifica. Quindi, quando il binario è stato creato, puoi usare ident per estrarre quell'informazione. Ad esempio:

Aggiungi qualcosa di simile al tuo file cpp:

static char fileid[] = "$Id: fname.cc,v 1.124 2010/07/21 06:38:45 author Exp $";

E l'esecuzione di ident (che puoi trovare installando rcs) sul programma dovrebbe mostrare le informazioni sui file che contengono una stringa id.

ident program
program:
    $Id: fname.cc,v 1.124 2010/07/21 06:38:45 author Exp $

Nota Come le persone hanno menzionato nei commenti, questa tecnica è arcaica. Avere il sistema di controllo del codice sorgente che modifica automaticamente il tuo codice sorgente è brutto e il fatto che il controllo del codice sorgente sia migliorato dai tempi in cui cvs era l'unica opzione significa che puoi trovare un modo migliore per raggiungere gli stessi obiettivi.


Linux
  1. Come controllare la versione del sistema operativo e di Linux

  2. Come scrivere un file in un altro?

  3. Come registrare ogni comando digitato in Bash e ogni operazione su file?

  4. libstdc++.so.5:impossibile aprire il file oggetto condiviso, ma la libreria è installata e aggiornata

  5. Thread e descrittori di file

Libreria condivisa Jenkins:come creare, configurare e utilizzare

Come montare e smontare i file system in Linux

Come controllare i dettagli della versione di Ubuntu e altre informazioni di sistema

Come controllare la versione di Ubuntu:metodi semplici e veloci

Come fare eco in un file

Ubuntu riconosce l'eseguibile come libreria condivisa e non lo eseguirà facendo clic