我有我的不和谐机器人项目。相关文件的文件结构如下:
include/
cpp-dotenv/
dotenv.h
lib/
libcpp_dotenv.a
src/
CMakeLists.txt
字符串
我的简化CMakeLists.txt:
cmake_minimum_required(VERSION 3.15)
set(BOT_NAME "tavernbot")
project(${BOT_NAME})
aux_source_directory(src mainsrc)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/lib)
add_executable(
${BOT_NAME}
${mainsrc})
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
target_include_directories(${BOT_NAME} PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
)
target_link_libraries(${BOT_NAME}
cpp_dotenv
)
型
当我构建时,我得到以下错误:
/usr/bin/ld: /mnt/e/my_bot/lib/libcpp_dotenv.a(dotenv.cpp.o): in function `dotenv::dotenv::operator[](std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const':
dotenv.cpp:(.text+0x24): undefined reference to `dotenv::getenv(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
/usr/bin/ld: /mnt/e/my_bot/lib/libcpp_dotenv.a(dotenv.cpp.o): in function `dotenv::dotenv::load_dotenv(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, bool)':
dotenv.cpp:(.text+0x1e1): undefined reference to `dotenv::Parser::Parser()'
/usr/bin/ld: dotenv.cpp:(.text+0x1f6): undefined reference to `dotenv::Parser::parse(std::istream&, bool, bool)'
/usr/bin/ld: dotenv.cpp:(.text+0x220): undefined reference to `antlr4::tree::ParseTreeWalker::~ParseTreeWalker()'
/usr/bin/ld: /mnt/e/my_bot/lib/libcpp_dotenv.a(dotenv.cpp.o): in function `dotenv::Parser::~Parser()':
dotenv.cpp:(.text._ZN6dotenv6ParserD2Ev[_ZN6dotenv6ParserD5Ev]+0x1b): undefined reference to `antlr4::tree::ParseTreeWalker::~ParseTreeWalker()'
/usr/bin/ld: /mnt/e/my_bot/lib/libcpp_dotenv.a(dotenv.cpp.o): in function `dotenv::Parser::~Parser()':
dotenv.cpp:(.text._ZN6dotenv6ParserD0Ev[_ZN6dotenv6ParserD5Ev]+0x1b): undefined reference to `antlr4::tree::ParseTreeWalker::~ParseTreeWalker()'
collect2: error: ld returned 1 exit status
gmake[3]: *** [CMakeFiles/tavernbot.dir/build.make:134: tavernbot] Error 1
gmake[2]: *** [CMakeFiles/Makefile2:139: CMakeFiles/tavernbot.dir/all] Error 2
gmake[1]: *** [CMakeFiles/Makefile2:146: CMakeFiles/tavernbot.dir/rule] Error 2
gmake: *** [Makefile:169: tavernbot] Error 2
型
你能告诉我我在CMakeLists.txt中哪里错了吗?为什么?
1条答案
按热度按时间nfzehxib1#
如果查看
cpp-dotenv
项目结构,您将看到dotenv
库还依赖于environ
和parser
库。字符串
然后如果你深入研究,你会发现这些项目子目录有更多的依赖项。
因此,要么修改一下
cpp-dotenv
配置,使其成为一个可安装的包,然后在CMakeLists.txt
中安装find_package
,要么保存麻烦,直接将该存储库按原样嵌入到项目中。在开发过程中,你需要编译一次,然后如果你是make clean YOUR_GTARGET
,第三方依赖项将留在你的项目树中。