2009-08-13 4 views
8

machen Wenn ich versuche, dieses Projekt mit cmake und gcc zu bauen auf einem 64-Bit-Linux (Debian) Maschine, bekomme ich einen Fehler von dem Linker:Bauvorhaben Cmake beteiligt, wie kann ich es bewusst Bibliotheken

Linking C executable ../../../../cpsadamsx 
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlopen' 
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlclose' 
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlerror' 
/home/dala/lib64/libSimTKcommon.so: undefined reference to `dlsym' 
collect2: ld returned 1 exit status 
make[2]: *** [cpsadamsx] Error 1 
make[1]: *** [sundials/examples/cpodes/serial/CMakeFiles/cpsadamsx.dir/all] Error 2 
make[1]: *** Waiting for unfinished jobs.... 

Anscheinend sind dlopen, dlclose, dlerror und dlsym Verweise auf libdl.so. Ich habe diese Bibliothek in /lib64/libdl.so.2, aber warum wird sie nicht gefunden?

Wäre es ein normales './configure gewesen; machen; machen install'-Pfad Ich konnte die LIBS Variable gesetzt haben und erteilt den Befehl configure wie folgt aus (glaube ich):

export LIBS=-ldl && ./configure 

Aber wie mache ich es jetzt?

UPDATE:

So scheint es, dass der (oder zumindest a) Bibliothek gefunden wird, enthält aber nicht die Symbole in Frage. Vielleicht versucht es mit der 32-Bit-Bibliothek in/lib?

Gibt es eine Möglichkeit, /lib64/libdl.so.2 zu disassemblieren, um sicherzustellen, dass es die Referenzen dlopen usw. hat?

Das Problem scheint jetzt die Build-Tools auf die richtige Version der Bibliothek zu führen.

Antwort

1

Wahrscheinlich müssen Sie target_link_libraries hinzufügen() - link text

+0

die funktionieren könnte, aber es ist nicht „mein“ Projekt, so vorzugsweise will ich nicht die CMakeLists.txt-Dateien bearbeiten. – dala

1

Fügen Sie diese in CMakeLists.txt sehen und es sollte funktionieren:

SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ldl") 
+2

Dies ist linuxspezifisch und nicht die beste Lösung, siehe Verweis auf CMAKE_DL_LIBS oben. – ideasman42

25

Da diese Frage auf Google zeigt und beide Antworten gewonnen‘ t zeigen Sie auf die richtige Lösung hier ist es:

In Ihrer CMakeLists.txt fügen Sie ${CMAKE_DL_LIBS}, um gegen Idl zu verknüpfen. Es sollte ähnlich aussehen:

target_link_libraries(ExpandableTest 
    ${CMAKE_DL_LIBS} 
    Expandable 
    ExpandableTestLibrary 
) 
+0

Dies ist der kompatibler anwser, sollte der akzeptierte sein. –

+1

Ich möchte hinzufügen, dass ich $ {CMAKE_DL_LIBS} an die letzte Position innerhalb der Liste verschieben musste. Sonst funktionierte es nicht für mich – Anonymous

Verwandte Themen