【发布时间】:2015-03-17 13:18:33
【问题描述】:
我正在尝试构建一个项目,其中包含几个用户定义的库和一个测试可执行文件,以在 Ubuntu 上使用 cmake 测试这些库。项目结构如下:
rootdir
|-- lib1
| |-- include/lib1.h
| |-- src/lib1.cpp
| |-- CMakeLists.txt
|-- test
| |-- test_lib1.cpp
| |-- CMakeLists.txt
|---CMakeLists.txt
rootdir/test/test.cpp 已包含 rootdir/lib1/include/lib1.h
rootdir/lib1/src/lib1.cpp 已包含 rootdir/lib1/include/lib1.h
rootdir/CMakeLists.txt:
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
project(mylib)
add_subdirectory(lib1)
add_subdirectory(test)
rootdir/lib1/CMakeLists.txt:
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
project(lib1)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
add_library(lib1 SHARED src/lib1.cpp)
rootdir/test/CMakeLists.txt:
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
project(test)
include_directories(${CMAKE_SOURCE_DIR}/lib1/include)
link_directories(${CMAKE_BINARY_DIR}/lib1)
add_executable(test_lib1 test_lib1.cpp)
target_link_libraries (test_lib1 lib1)
问题是我得到“undefined reference to...”lib1中定义的函数。
因为我可以在 build/lib1/ 中找到 liblib1.so 并且构建 lib1 时没有错误> 库,我猜 lib1 库构建成功。
更奇怪的是,我得到“undefined reference to...”只有那些在 lib1.cpp 中实现的函数。 lib1.h 中实现的简单函数不会触发“undefined reference to...”错误。
有什么建议吗?谢谢!
---编辑---
我按照建议将 add_subdirectory(lib1) 放在根 CMakeLists.txt 中的 add_subdirectory(test) 前面。但是,同样的问题仍然存在。
---编辑---
这是我的项目:https://www.dropbox.com/s/082oyglyjj46438/recognition.tar.gz?dl=0。
它与原始问题略有不同,因为它链接到外部库 PCL。但架构大体相同。
【问题讨论】:
-
我没有将
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)或project(test)部分放在测试应用程序中。我把它作为根项目的一部分。 -
把
add_subdirectory(test)放在根CMakeLists.txt中add_subdirectory(lib1)之后,去掉cmake_minimum_required(VERSION 2.6 FATAL_ERROR)和project(lib1) -
我听从你的建议:1) 删除 test/CMakeLists.txt 和 lib1/CMakeLists.txt 中的 cmake_minimum_required() 和 project()。 2) 将 add_subdirectory(test) 放在 add_subdirectory(lib1) 之后。但是,完全相同的问题仍然存在。
标签: cmake