web-dev-qa-db-de.com

undefinierter Verweis auf das Symbol 'pthread_key_delete @@ GLIBC_2.2.5

Ich versuche, eine Datei in Ubuntu zu erstellen, und wenn ich mache, erhalte ich diese Fehlermeldung:

/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

Ich habe jemanden gesehen, der erwähnt hat, in Makefile zu gehen und der Variablen LDFLAGS '-L/lib64 -l pthread' hinzuzufügen, aber wie machen Sie das? Total neu für Linux hier = X

13
imolital

Das obige Verknüpfungsproblem wird durch Hinzufügen gelöst 

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

Ich traf das gleiche Problem: -lpthread sollte in Ihrem Linkaufruf Der letzte sein (hat mit einer Mischung aus statischen und gemeinsam genutzten Symbolen zu tun)

Also mit CMake: ${CMAKE_THREAD_LIBS_INIT} sollte der letzte sein. Zum Beispiel:

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

Und für das OP: Suchen Sie in der CMakeLists.txt nach "Thread" für das Projekt, das Sie erstellen, und fügen Sie die Abschnitte ein (oder verknüpfen Sie das Projekt, das Sie erstellen möchten, wenn es Open Source ist) - falls dies nicht selbsterklärend ist

5

Wenn Sie mit Make oder etwas anderem erstellen, fügen Sie -pthread zur Kompilierungsbefehlszeile hinzu (auf diese Weise generiert GCC Thread-sichere statische Locals) und zur Verknüpfungsbefehlszeile (auf diese Weise fordert GCC den Linker an, das Richtige zu tun, vor allem die Verknüpfung) mit -lpthread).

Wenn Sie mit CMake bauen, benötigen Sie höchstwahrscheinlich diese ( vollständiges Beispiel ):

# always
FIND_PACKAGE(Threads REQUIRED)

# if using boost
SET(Boost_USE_MULTITHREADED ON)

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