web-dev-qa-db-fra.com

référence non définie au symbole 'pthread_key_delete @@ GLIBC_2.2.5

J'essaie de créer un fichier dans Ubuntu et quand je fais, je continue à avoir cette erreur:

/usr/bin/ld: ../../gtest-1.7.0/libgtest.a(gtest-all.cc.o): undefined reference to symbol     'pthread_key_delete@@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

J'ai vu quelqu'un mentionner d'aller dans Makefile et d'ajouter '-L/lib64 -l pthread' à la variable LDFLAGS mais comment procédez-vous? Totalement nouveau sur Linux ici = X

13
imolital

Le problème de liaison ci-dessus est résolu en ajoutant 

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

Je pose le même problème: -Lpthread devrait être le dernier dans votre invocation de lien (Concerne le mélange de symboles statiques et partagés)

Donc avec CMake: ${CMAKE_THREAD_LIBS_INIT} devrait être le dernier. Par exemple:

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

Et pour l'OP: Recherchez "thread" dans le fichier CMakeLists.txt pour le projet que vous construisez et collez cette section (ou le lien du projet que vous essayez de construire s'il est open source) - si ce qui précède n'est pas évident

5
Laurent Demailly

Si vous construisez avec Make ou quelque chose d'autre, ajoutez -pthread à la ligne de commande de compilation (pour que GCC génère des locals statiques thread-safe) et à la ligne de commande de liaison (afin que GCC indique à l'éditeur de liens qu'il doit faire la bonne chose, notamment link avec -lpthread).

Si vous construisez avec CMake - alors vous aurez probablement besoin de ces informations ( exemple complet ):

# always
FIND_PACKAGE(Threads REQUIRED)

# if using boost
SET(Boost_USE_MULTITHREADED ON)

TARGET_LINK_LIBRARIES(my_app ... ${CMAKE_THREAD_LIBS_INIT})
0
bobah