CMake 中的 C++ 链接器标志

Ama*_*ani 4 c++ cmake

我正在编译 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。

uto*_*pia 5

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)