2014-07-09 15 views
9

für ein Projekt Ich muss eine ausführbare Datei erstellen, die alle Bibliotheken enthält, die ich verwendet habe (opencv, cgal), um sie auf einem Computer auszuführen, der diese Bibliotheken nicht enthält. Momentan ist dies meine CMakeLists.txt (ich benutze Linux).Kompilieren einer statischen ausführbaren Datei mit CMake

So sind nur GMP und einige andere C++ Bibliotheken in meiner ausführbaren Datei enthalten. Meine Frage ist: Wie kann ich ein Makefile erstellen, um automatisch alle Bibliotheken in einer statischen Weise einzubinden und nur eine "große" ausführbare Datei zu erstellen, die alle Bibliotheken enthält? Kannst du mir helfen?

+0

Sie sollten verwenden 'Datei (GLOB ...) nicht' Quelle zu sammeln Dateien, die es nicht korrekt funktionieren, wenn Sie neue Dateien hinzufügen. Es ist auch sehr unklar, was dein Problem ist. Die 'add_library (IMPORTED)' Aufrufe machen auch nichts. – pmr

+0

Ich muss eine ausführbare Datei erstellen, die alle Bibliotheken enthält (opencv, cgal und alle gängigen C++ - Bibliotheken), um die ausführbare Datei auf einem anderen Computer auszuführen, auf dem Opencv oder CGAL oder andere C++ - Bibliotheken nicht installiert sind. – Andrea

+0

Zuerst müssen Sie sicherstellen, dass alle Bibliotheken, auf die Sie angewiesen sind, statisch aufgebaut sind. Dies ist oft nicht der Fall. Danach müssen Sie sicherstellen, dass Ihre 'find_package' Aufrufe diese statischen Bibliotheken finden. – pmr

Antwort

16

fügen Sie diese Zeilen vor add_executable:

SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a") 
SET(BUILD_SHARED_LIBRARIES OFF) 
SET(CMAKE_EXE_LINKER_FLAGS "-static") 

EDIT

Auf Modernem CMake (3.x +), können Sie auch verwenden:

set_target_properties(your_target_name PROPERTIES LINK_FLAGS "-static") 
0

Fügen Sie diese Zeilen nach add_executable(MyExec "main.c") (zum Beispiel):

target_link_libraries(MyExec PUBLIC "-static")

oder vor: link_libraries("-static")

Verwandte Themen