You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CMake编译项目时出现pthread未定义引用错误

项目编译报错:GLIBC版本依赖不兼容及pthread链接问题

项目结构

-project
    |-CMakeLists.txt       (后续称第一个CMakeLists)
    |-build
         |-some files here
    |-src
       |-main.cpp
       |-my_lib.h
       |-my_lib.cpp
       |-CMakeLists.txt      (后续称第二个CMakeLists)
    |-lib
       |-third_party_lib.so
    |-dep
       |-third_party_lib
               |-few .h files here
       |-CMakeLists.txt           (后续称第三个CMakeLists)

编译错误

进入build目录执行cmake ..和cmake --build .后,出现以下链接错误:

/usr/bin/ld: ../lib/third_party_lib.so: undefined reference to `pthread_key_create@GLIBC_2.34'
/usr/bin/ld: ../lib/third_party_lib.so: undefined reference to `pthread_setspecific@GLIBC_2.34'
/usr/bin/ld: ../lib/third_party_lib.so: undefined reference to `__libc_single_threaded@GLIBC_2.32'
/usr/bin/ld: ../lib/third_party_lib.so: undefined reference to `pthread_mutex_trylock@GLIBC_2.34'
/usr/bin/ld: ../lib/third_party_lib.so: undefined reference to `pthread_getspecific@GLIBC_2.34'
/usr/bin/ld: ../lib/third_party_lib.so: undefined reference to `std::__throw_bad_array_new_length()@GLIBCXX_3.4.29'
/usr/bin/ld: ../lib/third_party_lib.so: undefined reference to `lstat@GLIBC_2.33'
/usr/bin/ld: ../lib/third_party_lib.so: undefined reference to `pthread_once@GLIBC_2.34'
/usr/bin/ld: ../lib/third_party_lib.so: undefined reference to `pthread_cond_clockwait@GLIBC_2.34'

现有CMake配置

第一个CMakeLists(项目根目录)

cmake_minimum_required(VERSION 3.13)
project(reader LANGUAGES CXX)
include(GNUInstallDirs)
include (CTest)
find_package(PkgConfig REQUIRED)
add_subdirectory(dep)
add_executable("${PROJECT_NAME}")
add_subdirectory(src)
install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_FULL_BINDIR})

第二个CMakeLists(src目录)

add_library("core_${PROJECT_NAME}")
target_include_directories("core_${PROJECT_NAME}" PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

add_library(third_party_lib SHARED IMPORTED)
set_property(TARGET third_party_lib PROPERTY IMPORTED_LOCATION "${CMAKE_SOURCE_DIR}/lib/third_party_lib.so")
target_include_directories("core_${PROJECT_NAME}" PUBLIC ${CMAKE_SOURCE_DIR}/dep/third_party_lib)

target_sources("core_${PROJECT_NAME}" PRIVATE
    my_lib.cpp
    )

target_compile_features("core_${PROJECT_NAME}" PUBLIC cxx_std_17)
target_link_libraries("core_${PROJECT_NAME}" PUBLIC
    stdc++fs
    )

target_sources("${PROJECT_NAME}" PRIVATE main.cpp)
target_link_libraries("${PROJECT_NAME}" PRIVATE "core_${PROJECT_NAME}" third_party_lib)
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
target_link_libraries("${PROJECT_NAME}" PRIVATE Threads::Threads)
target_compile_features("${PROJECT_NAME}" PRIVATE cxx_std_17)
target_compile_definitions("${PROJECT_NAME}" PRIVATE
    VERSION="${PROJECT_VERSION}"
    )

第三个CMakeLists(dep目录)

set(SAVED_BUILD_DOCUMENTATION ${BUILD_DOCUMENTATION})
set(BUILD_DOCUMENTATION OFF)
set(SAVED_BUILD_TESTING BUILD_TESTING)
set(BUILD_TESTING OFF)
set(BUILD_DOCUMENTATION ${SAVED_BUILD_DOCUMENTATION})
set(BUILD_TESTING ${SAVED_BUILD_TESTING})

问题

我已经尝试在第二个CMakeLists中链接Threads库,但错误依然存在,请问还有什么解决办法?


内容的提问来源于stack exchange,提问作者Dmitry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 15:43:18