En la programación C, pensé que un archivo objeto se puede vincular con éxito con un archivo .so, siempre que el archivo .so ofrezca todos los símbolos que se han declarado en el archivo de encabezado.¿El programa necesita símbolos adicionales de la biblioteca compartida .so excepto aquellos declarados en el archivo de encabezado?
Supongamos que tengo foo.c, bar.h y dos bibliotecas libbar.so.1 y libbar.so.2. La implementación de libbar.so.1 y libbar.so.2 es totalmente diferente, pero creo que está bien siempre y cuando ambos ofrezcan funciones declaradas en bar.h.
Vinculaba foo.o con libbar.so.1 y producía un archivo ejecutable: foo.bin. Este ejecutable funcionó cuando libbar.so.1 está en LD_LIBRARY_PATH. (Por supuesto, un enlace simbólico se hace como libbar.so) Sin embargo, cuando cambio el enlace simbólico a libbar.so.2, foo.bin no pudo ejecutar y se lo impidió :
undefined symbol: _ZSt4cerr
libbar.so.1 es una biblioteca compilada en C++, mientras que libbar.so.2 es una biblioteca compilada. No entiendo por qué foo.bin necesita esos símbolos relacionados con C++ que solo son significativos en libbar.so.1, ya que foo.bin se basa en el código c puro foo.c.
¡Gracias! Es incompatible con el compilador. – solotim
Cambiado a otra pregunta: http://stackoverflow.com/questions/2371073/how-to-write-c-so-library-to-subsitute-existing-c-so-library – solotim