GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo incrustar la información de la versión en la biblioteca compartida y el binario?

Para ampliar la respuesta de @sashang y evitar los problemas de "$Id:$" mencionados por @cdunn2001, ...

Puede agregar un archivo "version_info.h" a su proyecto que solo tiene:

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

Y en su archivo main.c tenga la línea:

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

(o como quieras usar estos valores en tu programa)

A continuación, configure un paso de precompilación que lea el archivo version_info.h, superponga los números de forma adecuada y vuelva a escribirlo. Una compilación diaria solo aumentaría el número VERSION_BUILD, mientras que una versión más seria aumentaría otros números.

Si su archivo MAKE incluye esto en la lista de requisitos previos de su objeto, entonces la compilación volverá a compilar lo que necesita.


Los compiladores Intel Fortran y C++ ciertamente pueden hacer esto, use el -sox opción. Entonces, sí, hay una manera. No conozco ninguna convención generalizada para incrustar dicha información en un binario y, por lo general, uso Emacs en modo hexadecimal para leer la información incrustada, lo cual es bastante complicado.

'-sox' también incorpora las opciones del compilador utilizadas para construir un ejecutable, lo cual es muy útil.


Una forma de hacerlo si usa cvs o subversion es tener una cadena de identificación especial formateada especialmente en su archivo fuente. Luego, agregue un gancho de confirmación previa a cvs o svn que actualice esa variable especial con la nueva versión del archivo cuando se confirme un cambio. Luego, cuando se construye el binario, puede usar ident para extraer esa información. Por ejemplo:

Agregue algo como esto a su archivo cpp:

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

Y ejecutar ident (que puede encontrar instalando rcs) en el programa debería mostrar la información sobre los archivos que tienen una cadena de identificación en ellos.

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

Nota Como la gente ha mencionado en los comentarios, esta técnica es arcaica. Tener el sistema de control de fuente cambiando automáticamente su código fuente es feo y el hecho de que el control de fuente haya mejorado desde los días en que cvs era la única opción significa que puede encontrar una mejor manera de lograr los mismos objetivos.


Linux
  1. Cómo verificar la versión del sistema operativo y Linux

  2. `^m` ¿Y cómo deshacerse de él?

  3. ¿Cómo restablecer todas las preferencias de Rhythmbox y la información de la biblioteca?

  4. libstdc++.so.5:no se puede abrir el archivo de objeto compartido, pero la biblioteca está instalada y actualizada

  5. ¿Cómo hacer el control de versiones de una biblioteca compartida en Linux?

Biblioteca compartida de Jenkins:cómo crear, configurar y usar

Cómo montar y desmontar sistemas de archivos en Linux

Cómo verificar los detalles de la versión de Ubuntu y otra información del sistema

Cómo verificar la versión de Ubuntu:métodos rápidos y fáciles

Cómo hacer eco en un archivo

Ubuntu reconoce el ejecutable como biblioteca compartida y no lo ejecutará haciendo clic en