2017-02-20 1 views
0

Hi ich versuche, eine einfache gemeinsame Bibliothek zu verwenden, die ich mit einer Datei gemacht habe, die nur ein Haupt enthält. (ich habe erste cmake . laufen, die gut funktioniert und hatten keine Fehler zurück)Verwenden von cmake mit einer freigegebenen (dynamischen) Bibliothek

Der Fehler

$ make 
Scanning dependencies of target myprog 
[ 50%] Building C object CMakeFiles/myprog.dir/main.c.o 
[100%] Linking C executable myprog.exe 
/usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../x86_64-pc-cygwin/bin/ld: cannot find -lhello-user 
collect2: error: ld returned 1 exit status 
clang-3.8: error: linker (via gcc) command failed with exit code 1 (use -v to see invocation) 
make[2]: *** [CMakeFiles/myprog.dir/build.make:95: myprog.exe] Error 1 
make[1]: *** [CMakeFiles/Makefile2:68: CMakeFiles/myprog.dir/all] Error 2 
make: *** [Makefile:84: all] Error 2 

Die CMakeLists.txt

cmake_minimum_required(VERSION 2.8.8) 
project(LIB_EXAMPLE) 
set(CMAKE_C_COMPILER clang) 
add_executable(myprog main.c) 
target_link_libraries(myprog hello-user) 

Die Bibliothek

existiert innerhalb von /usr/local/lib/ als libhello-user.dll.a Datei

Hinweis: Ich benutze Cygwin mit cmake und make.

+1

Mögliches Duplikat [So richtig eine CMake-Datei für ein modulares Projekt erstellen] (http://stackoverflow.com/questions/41519666/how-to-correctly-create-a-cmake-file -für-ein-modulares-Projekt). Siehe [CMake/Tutorials/Ziele exportieren und importieren] (https://cmake.org/Wiki/CMake/Tutorials/Exporting_and_Importing_Targets). Ich würde wahrscheinlich etwas hinzufügen, beginnend mit 'add_library (Hallo-Benutzer SHARED IMPORTED GLOBAL)'. – Florian

+0

Aber ich erstelle keine neue Bibliothek? Ich versuche, einen aktuellen zu verwenden. ? – Mark

+0

Ja, aber die Lösung ist die gleiche. Siehe meine Antwort unten. – Florian

Antwort

1

Drehen meines Kommentars in einer Antwort

CMake/Tutorials/Exporting and Importing Targets See.

Sie entweder:

  • einen vollständigen Pfad
    • CMake ist nicht für es für die Bibliothek der Suche zu nennen automatisch
    • Sie so etwas wie find_library(_lib_path NAMES hello-user)
  • hinzufügen müssten
  • oder - besser - setzen Sie diese in ein importiertes Ziel

    cmake_minimum_required(VERSION 2.8.8) 
    project(LIB_EXAMPLE) 
    
    add_library(hello-user SHARED IMPORTED GLOBAL) 
    set_target_properties(
        hello-user 
        PROPERTIES 
         IMPORTED_LOCATION /usr/local/lib/libhello-user.dll 
         IMPORTED_IMPLIB /usr/local/lib/libhello-user.dll.a 
    )  
    
    add_executable(myprog main.c) 
    target_link_libraries(myprog hello-user) 
    
+0

Danke das funktioniert. Können Sie mir erklären, warum mein Weg nicht funktioniert hat? – Mark

Verwandte Themen