2014-09-02 10 views
11

Sto cercando di creare un file in Ubuntu e quando faccio io continuo a ricevere questo errore:undefined reference to simbolo '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 

ho visto qualcuno di nota di andare in Makefile e aggiungendo '-L/lib64 -l pthread' alla variabile LDFLAGS ma come si fa? Completamente nuovo a linux qui = X

+0

sto vedendo la stessa cosa, e sarebbe apprezzare un CMake-Orie risposta –

risposta

2

mi ha colpito lo stesso problema: -lpthread dovrebbe essere l'ultima nella vostra invocazione che collega (ha a che fare con il mix di statica e simboli condivisi)

Quindi, con CMake: ${CMAKE_THREAD_LIBS_INIT} dovrebbe essere ultimo. Per esempio:

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

E per il PO: Cerca "filo" in CMakeLists.txt per il progetto il vostro stanno costruendo e incollare quelli sezione (o un link che progetto che si sta tentando di costruire se è open source) - se quanto sopra non è auto esplicativo

+1

Questa è più una risposta appropriata per più piattaforme. Compilare su Mac vs Linux ha requisiti diversi e questo impedisce brutte cose 'if (APPLE)'. – David

15

è possibile che questo collegamento problema è risolto con l'aggiunta di

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

con i migliori saluti,

+1

È possibile risolvere questo problema senza utilizzare Makefile? –

+0

Risolto il problema per me, compilando un progetto open source su un cluster in cui non ho alcun controllo sull'ambiente. Saluti. – domini1000