2009-08-13 11 views
8

Kiedy próbuję zbudować ten projekt z cmake i gcc na 64-bitowym systemie Linux (Debian) maszyna, pojawia się błąd z łącznikiem:projekt budynku obejmujące cmake, jak mogę uczynić go świadoma bibliotek

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.... 

Podobno dlopen, dlclose, dlerror i dlsym są odnośnikami do libdl.so. Mam tę bibliotekę w /lib64/libdl.so.2, ale dlaczego jej nie znaleziono?

Czy byłby to normalny "./configure; robić; dokonać install'-path mogłem ustawić zmienną libs i wydał polecenie configure tak (chyba):

export LIBS=-ldl && ./configure 

Ale jak mogę to zrobić teraz?

UPDATE:

Wydaje się więc, że (a przynajmniej) biblioteka zostanie znaleziony, ale nie zawiera symbole w pytaniu. Być może próbuje z 32-bitową biblioteką w/lib?

Czy istnieje sposób na zdekompilowanie pliku /lib64/libdl.so.2, aby mieć referencje dlopen itp?

Problem wydaje się teraz wskazywać narzędzia do budowania poprawnej wersji biblioteki.

Odpowiedz

1

Prawdopodobnie trzeba dodać target_link_libraries() - patrz link text

+0

To może działać, ale to nie jest „mój” projekt, więc najlepiej nie chcę edytować pliki CMakeLists.txt. – dala

1

Dodaj ten w CMakeLists.txt i powinno działać:

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

To jest specyficzne dla systemu Linux, a nie najlepsze rozwiązanie, zobacz odniesienie do CMAKE_DL_LIBS powyżej. – ideasman42

25

Jak to pytanie jest wyświetlane na google i obie odpowiedzi wygrał” t wskaż poprawne rozwiązanie tutaj:

W twoim CMakeLists.txt dodaj ${CMAKE_DL_LIBS}, aby połączyć z idl. on powinien wyglądać podobnie do tego:

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

To jest bardziej kompatybilny anwser, powinien być zaakceptowany. –

+1

Chcę dodać, że musiałem przenieść $ {CMAKE_DL_LIBS} do ostatniej pozycji na liście. W przeciwnym razie to nie zadziałało – Anonymous

Powiązane problemy