He creado una biblioteca compartida (* .so) usando los archivos de código de objeto * .o (código fuente C) utilizando el compilador RVDS en Windows Host.Cómo exportar símbolos de una biblioteca compartida
que enlazar este objeto compartido con una aplicación (usando gcc para la meta del brazo en el host Linux) y obtener un ejecutable, que en la ejecución genera fallo de segmentación. (Yo sé que tengo que depurarlo!)
En lugar de creando una biblioteca compartida, si creo una biblioteca estática con los mismos archivos fuente, y luego me enlace con la aplicación, y luego ejecuto la aplicación, funciona bien como se esperaba.
Así que mis preguntas son: -
¿Es necesario exportar símbolos (funciones exportadas de la aplicación) o cualquier otro símbolo, de manera explícita, en mi archivo de origen utilizando algunas construcciones para que funcione bien cuando se vinculan con una aplicación? ¿Qué se necesita y cómo lo hago?
¿Cómo funciona la biblioteca compartida ?, es decir, las direcciones donde se cargarán y ejecutarán las funciones, se darán en la biblioteca que se darán cuando se cree la biblioteca. ¿Cómo resuelve la aplicación (main()) las direcciones donde se ejecutarán las funciones de la biblioteca?
¿Cómo funciona la biblioteca estática, es decir, cómo ocurre esta especificación y resolución de direcciones en el caso de una biblioteca estática?
Gracias.
@Jonathan: no estoy cargando la biblioteca compartida mediante llamadas dlopen(). – goldenmean
OK - No tengo ideas. Estoy más familiarizado con Unix/Linux; Podría ser más ayuda allí. –