Pregunta

No creo que mi pregunta fue respondida aquí ya. Asi que aqui esta, Tengo una biblioteca estática que mantener y actualizar periódicamente. También puedo actualizar correctamente el número de versión. Ahora mi aplicación que utiliza este enlace debe biblioteca para exactamente la misma versión de la biblioteca y no a los más viejos o nuevos. Una cosa que intenté fue utilizar macros predefinidas en el archivo de cabecera bibliotecas y comprobar que en mi solicitud. Funcionó, pero de esa manera sólo se puede garantizar que los archivos de cabecera correctas. ¿Hay alguna técnica de modo que la conexión fallará si se trata de la biblioteca mal ?? Espero que la pregunta es un poco clara.

Hari

¿Fue útil?

Solución

No estoy seguro de que lo recomiendo, pero ...

La cabecera puede incluir:

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

El usuario del código escribe en términos de los nombres de función sin decorar (lib_functionA), mientras que los asegura de cabecera que la versión sufijo correcta es adjuntas.

Usted no necesariamente tiene que modificar todas las funciones; usted necesita asegurarse de que alguna función que siempre va a ser utilizado está adornada con el número de versión. Si hay una función de inicialización (lib_init(), tal vez), a continuación, utilizar eso. Usted puede hacerlo a una variable; a continuación, la parte difícil es asegurarse de que la variable se hace referencia en cada programa.

Tenga en cuenta que es más habitual para garantizar que la interfaz a una biblioteca se mantiene sin cambios en las versiones para que los programas se pueden enlazar con cualquier versión sin necesidad de compilación.

Otros consejos

Todo lo que necesita es un símbolo único en relación con el número de versión, por ejemplo:

int version_1_1_5=0;

en la biblioteca y un cierto uso de la misma en la aplicación, por ejemplo:

extern int version_1_1_5; //decl
int *p = &version_1_1_5;  // use
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top