2010-01-18 8 views
7

Wie kann ich automake zwingen, eine standardmäßige shared library anstelle einer libtoolisierten zu erstellen? Normalerweise würde ich die abc.so erstellen, die mit einem vollständigen Pfad referenziert und in das Hauptprogramm geladen wird. Gibt es eine Möglichkeit, AM zu zwingen, dasselbe zu tun? Wenn ich es als _LIBRARY Liste, auto klagt: 'abc.so' is not a standard library name; did you mean 'libabc.a'Automake und standard shared libraries

Nur um zu klären: Ja, ich .so Unterstützung braucht nur - keine Statik. Und ja, ich möchte einen benutzerdefinierten Dateinamen.

+0

Lol ... Dies ist ein klassisches Zeichen von Over-Engineering von Ingenieuren. Es passiert, wenn Ingenieure Anforderungen fahren dürfen. Sie nehmen etwas Einfaches und machen es so komplex, dass es kaum nutzbar ist (wenn es überhaupt nutzbar ist). – jww

Antwort

6

Automake weiß nicht, wie man eine gemeinsam genutzte Bibliothek erstellt, weil es keinen tragbaren Weg gibt, dies zu tun. Wenn Sie eine gemeinsame Bibliothek mit Automake haben wollen, müssen Sie Automake + Libtool verwenden. Beachten Sie, dass Sie libtool problemlos so konfigurieren können, dass keine statische Bibliothek (mit LT_INIT([disable-static]) in Ihrer configure.ac) standardmäßig erstellt wird.

+0

Nicht wirklich, was ich im Sinn hatte, aber etwas akzeptieren musste – viraptor

+0

Hmmm ... Das scheint keine gute Lösung zu sein, wenn ausdrücklich gesagt wurde, statische Bibliotheken zu erstellen. Siehe auch [27.8 Per-Object-Flags-Emulation] (https://www.gnu.org/software/automake/manual/html_node/Per_002dObject-Flags.html) im Automake-Handbuch. – jww

0

IIRC, es gibt nichts besonderes an Bibliotheken erstellt mit Hilfe von Libtool, es sei denn, Sie verknüpfen mit libltdl. Wenn Sie nicht libtool verwenden wollen, haben Sie die Macht zu wählen und kümmern sich nicht so sehr um Portabilität, dann können Sie automake ohne libtool verwenden. Ich würde empfehlen, stattdessen die Macht von Libtool zu verwenden.

Eigentlich weiß ich nicht einmal, was _LIBRARY ist gut für, fand es nicht in der the manual/Linking section.

1

Eine libtoolisierte Bibliothek ist ein Wrapper um eine oder mehrere Standardbibliotheken. Sie finden diese Bibliotheken in ".libs" nach dem Ausführen von "make" oder in "$ prefix/lib" nach dem Ausführen von "make install".

Auf einer Linux-Maschine sollten Sie schließlich eine Datei namens "libabc.so" finden.

7

libtool ist der Weg zu gehen. Wenn Sie einen benutzerdefinierten Namen möchten, fügen Sie die -module Option _LDFLAGS, zum Beispiel:

plugindir= /some/where 
plugin_LTLIBRARIES= abc.la 
abc_la_LDFLAGS= -module