2012-06-26 15 views
5

Ich möchte eine gemeinsame Bibliothek bauen, die ZipArchive mit GNU Autotools verwendet, aber ich habe dieses Problem:Warum möchte Libtool keine Verbindung zu einer statischen Bibliothek herstellen?

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.

Wenn ich eine statische Bibliothek bauen oder wenn ich eine gemeinsame Bibliothek von ZipArchive verwenden es funktioniert, aber das Problem ist, dass das Makefile, das mit ZipArchive-Quellcode geliefert wird, nur eine statische Bibliothek erstellt.

Wie kann ich Libtool zwingen, eine Verbindung mit einer statischen Bibliothek herzustellen?

Antwort

4

Im Allgemeinen werden statische Archive mit Nicht-Pic-Objektdateien erstellt und sie können nicht in gemeinsam genutzten Bibliotheken abgelegt werden.

Was diese Nachricht Ihnen jedoch sagt, ist, dass, wenn ein Programm mit LYTTOOL zu Ihrer Bibliothek verbindet, diese -lziparch dem Link hinzugefügt wird. Sie brauchen also nicht zu ändern, es sei denn, Sie bauen ein Modul für eine interpretierte Sprache. In diesem Fall müssen Sie ZipArchive als gemeinsam genutzte Bibliothek erstellen. Darüber hinaus würde dies auf einer Plattform wie MS Windows nicht funktionieren, bei der gemeinsam genutzte Bibliotheken (DLLs) alle ihre Symbole zur Verbindungszeit auflösen müssen.

Alles, was gesagt wird, wenn Ihre statische lib-Ziparch-Bibliothek PIC-Code ist, können Sie das Flag -whole-archive verwenden, wenn Sie es mit Ihrer Bibliothek verknüpfen. Dies wäre jedoch die am wenigsten tragbare Lösung.

Verwandte Themen