c++ - 使用 CMake 对 `shm_open' 的 undefined reference

标签 c++ cmake g++ librt

我在 Ubuntu 14.04 下使用 CMake 配置我的项目。 我需要使用第 3 方库(比如 stuff.so)。 在 CMakeLists.txt 中,我使用 TARGET_LINK_LIBRARIES 链接素材库。 但是,我得到一个错误:

DIR_TO_LIB/stuff.so:-1: error: undefined reference to `shm_open'

我试图将这些标志放在 CMakeLists.txt 中,但没有成功:

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lrt")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lrt")

一篇帖子 ( link ) 说 -lrt 应该作为 g++ 的最后一个参数。在我使用 CMake 的情况下,我应该怎么做?

更新: 我加了

SET (CMAKE_VERBOSE_MAKEFILE 1)

我发现 -lrt 不是最后一个(即使我把它放在目标链接的末尾)。请看这个link用于编译输出。

从编译输出中可以看出,opencv 有一些链接标志。 我不明白这是怎么发生的,因为我首先在 TARGET_LINK_LIBRARIES 中链接了 OpenCV 库。 CMake 如何处理这些链接顺序?

另请参阅我的 CMakeLists.txt .

谢谢。

最佳答案

需要在TARGET_LINK_LIBRARIES中添加rt作为最后一个,例如:

TARGET_LINK_LIBRARIES(my_app ${Boost_LIBRARIES} rt)

您可以通过启用详细构建输出来验证 rt 的位置:

SET (CMAKE_VERBOSE_MAKEFILE 1)

关于c++ - 使用 CMake 对 `shm_open' 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31147129/

相关文章:

python - C++ 服务器无法通过套接字从 python 客户端读取我的消息

c++ - cmake add_library 如何决定符号的可见性?

c++ - 在WSL上安装Apache Kudu

gcc - cmake & gcc 每次都会编译每个文件

c++ - 对构造函数和析构函数的 undefined reference

c++ - 派生类作为默认参数 g++

c++ - 无法在派生类的构造函数的初始化中访问 protected 函数

C++ 'map' 数字范围

c++ - 复制动态库时 dlclose 崩溃

c++ - g++ 链接器 : force static linking if static library exists?