我正在编译 C++ 程序并收到以下错误消息:
undefined reference to 'pthread_mutexattr_init'
undefined reference to 'dlopen'
undefined reference to 'dlerror'
undefined reference to 'dlsym'
undefined reference to 'dlclose'
Run Code Online (Sandbox Code Playgroud)
为了解决该错误,pthread我将以下链接器标志添加到我的CMakeLists.txt.
if (UNIX)
set(CMAKE_CXX_FLAGS "-pthread")
endif (UNIX)
Run Code Online (Sandbox Code Playgroud)
这解决了pthread错误。为了解决该libdl错误,我继续将其修改为以下内容。
if (UNIX)
set(CMAKE_CXX_FLAGS "-pthread -dl")
endif (UNIX)
Run Code Online (Sandbox Code Playgroud)
这给了我一个警告
unrecognized gcc debugging option: l
Run Code Online (Sandbox Code Playgroud)
我修改为以下内容
if (UNIX)
set(CMAKE_CXX_FLAGS "-pthread")
set(CMAKE_CXX_FLAGS "-dl")
endif (UNIX)
Run Code Online (Sandbox Code Playgroud)
并返回所有错误消息
unrecognized gcc debugging option: l.
Run Code Online (Sandbox Code Playgroud)
我是否想念如何在 CMake 中设置链接器标志?我到底做错了什么?我使用的是 Ubuntu 17.04 x64。
pthread这是和的现代规范 CMake 方法dl:
cmake_minimum_required(VERSION 3.9)
project(my_pthread_dl_project)
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads)
add_executable(myexe source.c)
target_link_libraries(myexe
Threads::Threads
${CMAKE_DL_LIBS})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3982 次 |
| 最近记录: |