将cmake与C ++项目一起使用时,发生“未定义的引用”错误

时间:2019-10-19 18:08:30

标签: c++ build cmake linker

我的项目具有以下结构:

-project
|- main.cpp
|- CMakeLists.txt
|- Headers
    |- animal.cpp
    |- animal.hpp
    |- lives.cpp
    |- lives.hpp
    |- CMakeLists.txt

我们还有:

#/project/CMakeLists.txt
cmake_minimum_required(VERSION 3.1)

set(CMAKE_CXX_STANDARD 11)

project(main)

include_directories(Headers/)
link_directories(Headers/)
add_subdirectory(Headers)

add_executable(main main.cpp Headers/animal.cpp Headers/lives.cpp)
target_link_libraries(main animal_lib)
target_link_libraries(main genome_lib)

以及

#/project/Headers/CMakeLists.txt
add_library(lives_lib STATIC lives.cpp lives.hpp)
add_library(animal_lib STATIC animal.cpp animal.hpp)

target_include_directories(lives_lib PUBLIC ./)
target_include_directories(animal_lib PUBLIC ./)

还要注意,animal.cpp包括lives.hpp。当我尝试运行cmake时,出现链接错误(undefined reference)。如果我删除了animal.cppanimal.hpp(以及所有依赖于它的功能,因此仅使用了lives.cpp中的东西),一切运行正常。是我正在使用lives.hpp中的animal.cpp中的函数吗?如果是,该如何解决。


注意::我尝试了一些测试,主要是here的建议。但是它仍然无法正确链接。


错误消息:

$ make
[ 33%] Built target animal_lib
Scanning dependencies of target genome_lib
[ 55%] Built target lives_lib
[ 66%] Linking CXX executable main
/usr/bin/ld: CMakeFiles/main.dir/Headers/animal.cpp.o: in function `Animal::set_something(double)':
animal.cpp:(.text+0x53): undefined reference to `Animal::something_else_'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/main.dir/build.make:118: main] Error 1
make[1]: *** [CMakeFiles/Makefile2:77: CMakeFiles/main.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

0 个答案:

没有答案