Ich baue ein Programm mit autoconf, automake und libtool. Meine Arbeit erfordert, dass ich (die meisten) Bibliotheken statisch verknüpfe. Dies war nicht ein Problem in der Vergangenheit, weil ich alles mit -all-static
statisch verknüpfen konnte. Jetzt ist es ein Problem, weil ich eine Bibliothek verwenden muss, die nur dynamisch ist; es wurde uns von einem Dritten gegeben, und wir haben keine Quelle.Wie kann ein Benutzer von autotools eine Kombination aus statischer und dynamischer Verknüpfung angeben?
Natürlich verursacht jetzt -all-static
den Build fehlschlagen. Ist es möglich, Littool zu sagen, alles statisch zu verknüpfen, außer für diese eine Bibliothek? Ist es möglich, Libtool eine beliebige Kombination von statischen und dynamische Verknüpfung zu haben, oder ist es alles oder nichts?
Bisher habe ich versucht, eine Convenience-Bibliothek mit LDFLAGS = -static
zu erstellen, die von den Bibliotheken abhängt, die ich statisch verknüpfen möchte. Aber libtool verkettet die statischen Bibliotheken nicht, wie ich es mir erhofft hätte. Das Programm, das von der Bequemlichkeits-Bibliothek abhängig ist, verbindet noch dynamisch alles.
Ich habe auch versucht --disable-shared
, aber das hat den Build nicht beeinflusst.
Diese Fragen sind ähnlich, aber meine Frage nicht wirklich beantworten:
Force linking a static library into a shared one with Libtool
Is it possible to link some — but not all — libraries statically with libtool?
(Ich will nicht gemeinsam genutzte Bibliotheken von meinem System löschen und den vollständigen Pfad für alles zu spezifizieren ist kaum besser als per Hand zu verknüpfen, aber vielleicht ist es der einzige Weg.)
Dies funktioniert, aber bei dem Verlust einiger Flexibilität.Ich brauche keinen dynamischen Build, aber wenn ich es jemals tun würde, müsste ich ein paar 'Makefile.am's bearbeiten, oder? Dies verursacht auch Probleme mit Makros wie 'AC_CHECK_LIB' (die nur ein' -l' zu 'LIBS' hinzufügen), aber ich denke, das ist zu erwarten. – tprk77
Ich gab den einfachsten Ansatz möglich. Für etwas Phantasie, könnten Sie jedoch die Flags in Ihre 'configure.ac' ziehen. Dort können Sie 'DYNLIBS =" - Wl, -Bdynamic, -L/path/to, lshared, -Bstatic "' mit einem Aufruf von 'AC_SUBST ([DYNLIBS])' hinzufügen. Dann müssen Sie nur '$ (DYNLIBS)' in Ihrer 'Makefile.am' aufrufen. Dies würde Ihnen mehr Kontrolle geben, aber denken Sie daran, dass 'AC_CHECK_LIBS' nicht nach statischen vs. dynamischen Bibliotheken sucht. Ist es das, was du willst oder gibt es etwas anderes, das es flexibler machen würde? – NickW
Ja, ich denke, das wird funktionieren, danke! – tprk77