2012-06-26 21 views
5

Quiero construir una biblioteca compartida que utiliza ZipArchive usando GNU Autotools pero estoy teniendo este problema:¿Por qué Libtool no quiere vincularse con una biblioteca estática?

Warning: linker path does not have real file for library -lziparch. 
I have the capability to make that library automatically link in when 
you link to this library. But I can only do this if you have a 
shared version of the library, which you do not appear to have 
because I did check the linker path looking for a file starting 
with libziparch and none of the candidates passed a file format test 
using a file magic. Last file checked: /usr/local/ZipArchive/ZipArchive/libziparch.a 
The inter-library dependencies that have been dropped here will be 
automatically added whenever a program is linked with this library 
or is declared to -dlopen it.

Si construyo una biblioteca estática o si uso una biblioteca compartida de ZipArchive funciona pero el problema es que el archivo MAKE que viene con el código fuente ZipArchive solo crea una biblioteca estática.

¿Cómo puedo obligar a Libtool a vincularse con una biblioteca estática?

Respuesta

4

Generalmente, los archivos estáticos se crean con archivos de objetos que no son pic y no se pueden poner en bibliotecas compartidas.

Sin embargo, lo que este mensaje te está diciendo es que cuando un programa se vincula a tu biblioteca usando Libtool, ese -lziparch se agregará al enlace. De modo que no necesita para cambiar nada a menos que esté creando un módulo para un idioma interpretado. En ese caso, deberá compilar ZipArchive como una biblioteca compartida. Además, esto no funcionaría en una plataforma como MS Windows donde las bibliotecas compartidas (DLL) tienen que resolver todos sus símbolos en el momento del enlace.

Dicho todo esto, si su ziparch lib estática es un código PIC, puede usar el indicador -whole-archive cuando lo vincule a su biblioteca. Sin embargo, esta sería la solución menos portátil.

Cuestiones relacionadas