Ich habe einige Untersuchungen durchgeführt und obwohl ich keine befriedigende Lösung für das Problem finden konnte, fand ich eine halbe Lösung.
Das Problem der statischen baut läuft darauf hinaus, 3 Dinge auf:
Gebäude und die Verknüpfung des internen Bibliotheken des Projektes.
Ziemlich einfach, man muss nur den BUILD_SHARED_LIBS
Schalter OFF
umlegen.
Statische Versionen von externen Bibliotheken finden.
Die einzige Möglichkeit scheint CMAKE_FIND_LIBRARY_SUFFIXES
zu sein, das gewünschte Dateisuffix (es) zu enthalten (es ist eine Prioritätenliste).
Diese Lösung ist ziemlich "dreckig" und sehr gegen die plattformübergreifenden Bestrebungen von CMake. IMHO sollte dies hinter den Kulissen von CMake gehandhabt werden, aber soweit ich es verstanden habe, scheint es wegen der ".lib" Verwirrung unter Windows, dass die CMake Entwickler die aktuelle Implementierung bevorzugen.
Statisch mit Systembibliotheken verknüpfen.
CMake bietet eine Option LINK_SEARCH_END_STATIC
, die auf der Dokumentation basiert: „Ende einer Verbindungsleitung, so dass statische Systembibliotheken verwendet werden." Man würde denken, das ist es, das Problem ist gelöst. Es scheint jedoch, dass die aktuelle Implementierung nicht der Aufgabe gewachsen ist. Wenn die Option aktiviert ist, erzeugt CMake einen impliziten Linker-Aufruf mit einer Argumentliste, die mit endet Die Optionen, die an den Linker übergeben werden, einschließlich -Wl,-Bstatic
, reichen jedoch nicht aus. Nur das Anweisen des Linkers, statisch zu verknüpfen, führt zu einem Fehler, in meinem Fall: /usr/bin/ld: cannot find -lgcc_s
. Was fehlt, ist auch gcc mitzuteilen, dass wir statische Verknüpfungen durch die -static
Argument, das nicht erzeugen an den Linker Aufruf von CMake ist. ich denke, dass dies ein Fehler ist, aber ich habe keine Bestätigung bekommen von den Entwicklern noch verwaltet.
Schließlich ich denke, all dies könnte und sollte von CMake hinter den Kulissen erledigt werden, Schließlich ist es nicht so kompliziert, außer dass es unter Windows unmöglich ist - wenn das als kompliziert gilt ...
Nicht ganz ein Betrüger von: http://stackoverflow.com/questions/2113231/making-cmake-choose-static - Verknüpfung, wenn möglich, die GCC-spezifisch ist. –
Nicht nur, dass es gcc-spezifisch ist, es ist auch eine unpraktische Lösung. Siehe meinen Kommentar zu der anderen Frage. – pszilard
@pszilard Haben Sie schließlich die Lösung gefunden? Ich versuche dasselbe mit g ++ zu machen. – augustin