Ist es möglich, einige zu verbinden - aber nicht alle - Bibliotheken statisch mit libtool?

StackOverflow https://stackoverflow.com/questions/1943834

  •  20-09-2019
  •  | 
  •  

Frage

Ich arbeite an einem Projekt, das gebaut wird unter Verwendung von autoconf, auto und libtool. Das Projekt wird in Binär- und Quellform verteilt.

Unter Linux standardmäßig die Build-Skript Links zu allen Bibliotheken dynamisch. Dies macht Sinn, da Linux-Anwender auf Paket-Manager ihre Distribution zu Griff Abhängigkeiten verlassen können.

Unter Windows standardmäßig die Build-Skript Links zu allen Bibliotheken statisch libtool die -all-static Option. Dies macht Sinn, da keine der Abhängigkeiten von Windows zur Verfügung gestellt werden, und es ist hilfreich, um ein einziges binäres alle Abhängigkeiten enthält, verteilen zu können, anstatt Ausmisten über Tonnen von DLLs zu verteilen.

Auf OSX, sind einige der Abhängigkeiten vom Betriebssystem zur Verfügung gestellt, und manche nicht. Daher wäre es hilfreich, auf die OS-Bibliotheken zur Verfügung gestellt dynamisch zu verknüpfen und zu den anderen Bibliotheken statisch. Leider libtool ist alles-oder-nichts -all-static Option hier nicht hilfreich ist.

Gibt es einen guten Weg, um get libtool Link zu einig Bibliotheken statisch, aber nicht alle?

Hinweis : Ich weiß, ich sorgfältig die Abhängigkeiten kompilieren konnte, so dass nur statische verfügbar Builds sind. Aber ich würde lieber das Build-System für mein Projekt in dem gemeinsamen Fall von statischen robust war und dynamische Builds von Abhängigkeiten zur Verfügung stehen.

Hinweis . Natürlich, ich bin nicht mit wirklich niedrigen Niveau Abhängigkeiten wie die C / C ++ Runtime-Bibliotheken betrifft, die immer dynamisch auf allen drei der oben genannten Plattformen verbunden sind,

War es hilfreich?

Lösung

Nach einigen Recherchen habe ich meine eigene Frage beantwortet.

Wenn Sie statische und dynamische Builds von einer Bibliothek installiert ist, und Sie einen Link zu dieser Bibliothek mit dem -l Parameter, libtool Links vorzugsweise auf den dynamischen Build. Es verbindet auf eine statische Aufladung, wenn es keine dynamischen Build verfügbar ist, oder wenn Sie die -static oder -all-static Optionen übergeben.

libtool kann anstelle der -l Option zu dieser Bibliothek, indem Sie den vollständigen Pfad zu Link zu der statischen Bibliothek gezwungen werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top