未定义引用`shm_open'使用CMake

时间:2015-06-30 19:45:51

标签: c++ cmake g++ librt

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

  

DIR_TO_LIB / stuff.so:-1:错误:未定义对`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

谢谢。

1 个答案:

答案 0 :(得分:3)

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

TARGET_LINK_LIBRARIES(my_app ${Boost_LIBRARIES} rt)

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

SET (CMAKE_VERBOSE_MAKEFILE 1)