2016-08-01 25 views
7

Problem:CMake: Verknüpfung statisch gegen libgcc und libstdC++ in einer gemeinsam genutzten Bibliothek

Ich habe Probleme Verknüpfung glibcc/glibC++ in einer gemeinsam genutzten Bibliothek CMake und GCC4.9 auf meinem Ubuntu 16.04 Installation.

Zusätzliche Bedingungen:

die gemeinsam benutzte Bibliothek Laden gibt ein Problem om Red Hat Produktionsumgebung (wo ich es zu kopieren), ich glaube, weil es eine andere libstC++ Version verwendet (Fehler: GLIBCXX_3_4_20 nicht gefunden) . Ich habe keine Sudo-Rechte und kann die Maschine nicht aktualisieren.

Wie ich aus this Blog abgeleitet, diese post, habe ich versucht, das statische Linken gegen libgcc und libgc Verknüpfung ++ mit:

set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static") 

und againg

set(CMAKE_SHARED_LINKER_FLAGS "-static-libgcc -static-libstdc++ -static") 

verwenden, aber das funktioniert nicht. Welche tut Arbeit ist das CMake Skript:

add_library(myLib SHARED ${SOURCE_FILES}) 
set(CMAKE_EXE_LINKER_FLAGS " -static") 
target_link_libraries(myLib -static-libgcc -static-libstdc++) 

Dies muss der falsche Weg, dies zu tun sein, meines Wissens -static-libgcc und -static-libstdC++ sind Linker-Optionen und nicht die Bibliotheken ...

Frage: Wie verbinde ich statisch gegen -libgcc und -libstdC++ richtig?

Vielen Dank im Voraus!

Antwort

7

Ja, target_link_libraries ist eine korrekte Möglichkeit, Linker Flags oder Linker-Optionen zu setzen.

Dokumentation von target_link_libraries:

Specify libraries or flags to use when linking a given target.

Item names starting with -, but not -l or -framework, are treated as linker flags.

https://cmake.org/cmake/help/v3.0/command/target_link_libraries.html (Schwerpunkt nicht im Original)

+0

Dank! Ok, ich hätte das Handbuch besser lesen sollen ... Ich denke, der Name target_link_libraries ist ein bisschen verwirrend, obwohl ... –