C++ CMake 中的链接器标志
C++ linker flags in CMake
我正在编译一个C++程序,并收到以下错误消息:
undefined reference to 'pthread_mutexattr_init'
undefined reference to 'dlopen'
undefined reference to 'dlerror'
undefined reference to 'dlsym'
undefined reference to 'dlclose'
为了解决pthread
的错误,我将以下链接器标志添加到我的CMakeLists.txt
。
if (UNIX)
set(CMAKE_CXX_FLAGS "-pthread")
endif (UNIX)
这解决了pthread
错误。为了解决libdl
错误,我继续将其修改为以下内容。
if (UNIX)
set(CMAKE_CXX_FLAGS "-pthread -dl")
endif (UNIX)
这给了我一个警告
unrecognized gcc debugging option: l
我将其修改为以下内容
if (UNIX)
set(CMAKE_CXX_FLAGS "-pthread")
set(CMAKE_CXX_FLAGS "-dl")
endif (UNIX)
并取回了所有错误消息
unrecognized gcc debugging option: l.
我是否错过了如何在 CMake 中设置链接器标志?我到底做错了什么?我使用的是 Ubuntu 17.04 x64。
这是用于pthread
和dl
的现代规范 CMake 方法:
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})
请尝试以下方法,而不是覆盖CMAKE_CXX_FLAGS
:
project(FooProject)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include_dir)
aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/source_dir FOO_SOURCES)
add_executable(foo ${FOO_SOURCES})
target_link_libraries(foo pthread dl)
set
命令将覆盖变量。如果您像这样使用它:
set(CMAKE_CXX_FLAGS "-pthread")
CMAKE_CXX_FLAGS
的旧同心将被替换。要将某些内容附加到变量,应使用set
命令,如下所示:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
相关文章:
- 在 CMake 中为每个目标设置编译器/链接器标志
- CMake 3.5 中的链接器标志位置
- C++ CMake 中的链接器标志
- 链接库作为 CMAKE 中工具链文件中标志的一部分
- 链接QT5库会自动将额外的FPIC标志传递给NVCC编译器,并通过cmake Cause错误
- 链接标志对静态库意味着什么
- Rcpp:Magick++中的编译器和链接器标志
- 如何从框架中知道链接标志
- 如何通过Gradle将链接标志传递到Android Studio中的CMAKE
- 标志以将IPDB和IOBJ文件从链接时间代码生成优化(LTCG)移动
- 为什么我需要将 -lstdc++ 添加到我的其他链接器标志中
- 链接器命令失败,退出代码为 1,在 g++ 中带有 -o3 标志
- cmake从子目录中添加了破坏链接/库链接优先级的标志和库
- 如何让OCaml链接器标志与C++cmake构建链接
- 重新排序GNU Autotools链接器标志
- xcode:添加链接器标志和"link binary with libraries"的区别
- 设备陀螺仪(加速度计)在 Cocos2dx-2.2.6 中无法使用 -ObjC 链接器标志
- 如何在 CMake 文件中添加链接器或编译标志
- 如何将链接器标志与 cuRAND 一起使用?并实施 cuRAND
- C++记录链接库的标志在哪里