我在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。
谢谢。
答案 0 :(得分:3)
您需要在rt
中添加TARGET_LINK_LIBRARIES
作为最后一个,例如:
TARGET_LINK_LIBRARIES(my_app ${Boost_LIBRARIES} rt)
您可以通过启用详细构建输出来验证rt
的位置:
SET (CMAKE_VERBOSE_MAKEFILE 1)