未定义的符号引用' pthread_rwlock_wrlock @@ GLIBC_2.2.5'在azure storage c ++ sdk编译中

时间:2016-11-02 09:48:56

标签: azure azure-storage azure-storage-blobs azure-storage-files

我正在尝试在Fedora 22上编译Azure存储c ++ SDK。我正在使用gcc版本5.1.1-1。当我使用以下命令编译测试应用程序时:

$> CASABLANCA_DIR=/source/codebox/azure/cpprestsdk/ CXX=g++ cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=on

$> make

它产生以下错误消息:

/usr/bin/ld: CMakeFiles/azurestoragetest.dir/main.cpp.o: undefined reference to symbol 'pthread_rwlock_wrlock@@GLIBC_2.2.5'
/usr/lib64/libpthread.so.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
tests/CMakeFiles/azurestoragetest.dir/build.make:879: recipe for target 'Binaries/azurestoragetest' failed
make[2]: *** [Binaries/azurestoragetest] Error 1
CMakeFiles/Makefile2:125: recipe for target 'tests/CMakeFiles/azurestoragetest.dir/all' failed
make[1]: *** [tests/CMakeFiles/azurestoragetest.dir/all] Error 2
Makefile:126: recipe for target 'all' failed
make: *** [all] Error 2

我可以在 / usr / lib64 目录中看到 libpthread.so.0 库。我需要安装哪个其他库?

2 个答案:

答案 0 :(得分:2)

将正确的find_package调用添加到您的CMakeLists.txt

find_package(Threads)

然后,将库链接到目标:

target_link_libraries(my_target ${CMAKE_THREAD_LIBS_INIT})

这就是全部。可能你忘记了target_link_libraries

答案 1 :(得分:0)

通常(在CMake和Azure存储SDK之外),此错误表示您需要与-lpthread链接。 (使用gcc,您可能需要-pthread。)