我正在构建一个共享库(使用一些C 11/14功能的C代码),它链接到我自己的静态库并使用线程 . 这一切都使用CMake . 当我链接我的共享库(“gscore”)并尝试链接到我的静态库(“gslicense”)时,我得到了关于pthreads中符号的错误 . 全文进一步缩小,但简短版本如下:

制作共享对象时不能使用'__pthread_key_create';用-fPIC重新编译

我已经尝试遵循建议并将-fPIC添加到我的两个项目的编译时标志中 . 我已经验证-fPIC是我的编译标志的一部分,但错误仍然存在 . 我不确定我错过了什么 .

这是错误 .

[ 57%] Linking CXX shared library libgscore.so
/usr/bin/ld: ../gslicense/libgslicense.a(gslicensing.cpp.o): relocation R_X86_64_32 against `__pthread_key_create' can not be used when making a shared object; recompile with -fPIC
../gslicense/libgslicense.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
GSCore/CMakeFiles/gscore.dir/build.make:1014: recipe for target 'GSCore/libgscore.so' failed
make[2]: *** [GSCore/libgscore.so] Error 1
CMakeFiles/Makefile2:173: recipe for target 'GSCore/CMakeFiles/gscore.dir/all' failed
make[1]: *** [GSCore/CMakeFiles/gscore.dir/all] Error 2
Makefile:83: recipe for target 'all' failed

以下是我在CMakeLists.txt文件中添加线程到项目的方法

#
# pthread
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
target_link_libraries(gscore Threads::Threads)

这是使用CMake的Linux代码库端口的所有部分 . 我对Windows非常熟悉,但在Linux中摸索 . 我已经尝试搜索我能找到的所有线程,但我仍然不知所措 .

知道我错过了什么吗?