2014-09-02 13 views
11

Próbuję zrobić plik w Ubuntu i kiedy zrobić ciśgle ten błąd:niezdefiniowana odniesienia do symbolu „pthread_key_delete @@ GLIBC_2.2.5

/usr/bin/ld: ../../gtest-1.7.0/libgtest.a(gtest-all.cc.o): undefined reference to symbol  '[email protected]@GLIBC_2.2.5' 
/lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line 
collect2: error: ld returned 1 exit status 
make[2]: *** [src/tests/run_tests] Error 1 
make[1]: *** [src/tests/CMakeFiles/run_tests.dir/all] Error 2 
make: *** [all] Error 2 

widziałem kogoś przywołujące iść do Makefile i dodanie "-L/lib64 -l pthread" do zmiennej LDFLAGS, ale jak to zrobić? Całkowicie nowy w Linuksie tutaj = X

+0

widzę to samo, i docenić cUpewnij-Orie nted odpowiedź. –

Odpowiedz

2

uderzę ten sam problem: -lpthread powinien być ostatni w swojej łączącej inwokacji (ma do czynienia z mieszanką statyczne i wspólnych symboli)

Więc z CMake: ${CMAKE_THREAD_LIBS_INIT} powinny być ostatni, ubiegły, zeszły. Na przykład:

target_link_libraries(mytestlib 
    ${BINARY_DIR}/libgmock.a 
    glog 
    gflags 
    ${Boost_LIBRARIES} 
    ${CMAKE_THREAD_LIBS_INIT} 
) 

I PO: Szukaj „gwint” w CMakeLists.txt dla projektu swój budują i wklej te sekcję (lub link, które wystają staramy się budować, jeśli jest to open source) - jeśli powyższe nie jest oczywista

+1

Jest to bardziej odpowiednia odpowiedź na wiele platform. Kompilowanie na Mac w porównaniu do Linuksa ma inne wymagania, co zapobiega wszelkim brzydkim rzeczom 'if (APPLE)'. – David

15

powyższy łącząc problem jest rozwiązany przez dodanie

-lpthread -lm to CMakeLists.txt (target link libraries for luxrender); 
TARGET_LINK_LIBRARIES(... -lpthread -lm) 

poważaniem

+1

Czy ten problem można rozwiązać bez użycia Makefile? –

+0

Naprawiono błąd, kompilując projekt open source w klastrze, w którym nie mam kontroli nad środowiskiem. Twoje zdrowie. – domini1000

Powiązane problemy