gpt4 book ai didi

c++ - BOOST_ROOT 在 cmake 配置后的链接阶段不受尊重

转载 作者:太空宇宙 更新时间:2023-11-04 12:41:05 26 4
gpt4 key购买 nike

为冗长的标题道歉。

由于 /usr/lib64 目录中存在 boost 库,我正在努力将 boost 与 cmake 链接起来。我的 boost 是在不同的地方编译的,我将 cmake 指向 BOOST_ROOT。意识到潜在的问题,我正在设置一个最小版本和 Boost_NO_SYSTEM_PATH。配置阶段工​​作正常,但在链接时出现错误:

test.cpp:(.text._ZN5boost15program_options25basic_command_line_parserIcEC2EiPKPKc[_ZN5boost15program_options25basic_command_line_parserIcEC5EiPKPKc]+0xa8): undefined reference to `boost::program_options::detail::cmdline::cmdline(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>
>, std::allocator<std::__cxx11::basic_string<char,std::char_traits<char>, std::allocator<char> > > > const&)'

这显然是选择错误库的问题,我可以通过 make VERBOSE=2 看到 g++ 行不符合我之前找到的 boost 设置在 BOOST_ROOT

g++ CMakeFiles/test.dir/test.cpp.o -o test -rdynamic -lboost_program_options-mt

但我希望有一些类似的东西:

g++ ... -L/path/to/my/own/boost/lib -lboost_program_options-mt

作为“调试”步骤,我在 cmake 中使用 Boost_LIBRARY_DIRS 打印了一条消息,我可以看到 /path/to/my/own/boost/库。当我“手动”添加 -L 标志时,链接有效,这就是我知道系统库仍在干扰的方式。此外,我的 *LIBRARY_PATH 仅指向 /path/to/my/own/boost/lib

也许这不是FindBoost 模块的错误,但我很难相信。在我看来,cmake 中还有一些我不明白的主要内容?为什么在这个实例中没有生成 -L 标志或指向特定文件的链接?请指教。

这是我的CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

set(Boost_NO_SYSTEM_PATHS ON)
find_package(Boost 1.67.0 REQUIRED COMPONENTS program_options)

include_directories(${Boost_INCLUDE_DIR})

add_executable(test test.cpp)

target_link_libraries(test LINK_PUBLIC ${Boost_PROGRAM_OPTIONS_LIBRARY})

还有我的程序:

#include <iostream>
#include <string>

#include <boost/program_options.hpp>

namespace po=boost::program_options;

int main( int argc, char* argv[])
{
po::options_description options_description;
po::positional_options_description positional_options_description;
po::variables_map variables_map;


options_description.add_options()
("help,h", "print usage message");
po::store(po::command_line_parser(argc, argv).options(
options_description).positional(positional_options_description).run(),
variables_map);

return 0;
}

其他相关输出

我在 find_package 之后使用 messagecmake 配置步骤中提取变量:

${Boost_INCLUDE_DIR} /path/to/my/own/boost/include
${Boost_LIBRARY_DIRS} /path/to/my/own/boost/lib
${Boost_LIBRARIES} /path/to/my/own/boost/lib/libboost_program_options-mt.so
${Boost_PROGRAM_OPTIONS_LIBRARY} /path/to/my/own/boost/lib/libboost_program_options-mt.so

最佳答案

我不知道您使用的是哪个 CMake 版本,但您是否尝试过使用 Boost 导入的目标而不是老式的 CMake 变量:

即代替:target_link_libraries(测试 LINK_PUBLIC ${Boost_PROGRAM_OPTIONS_LIBRARY})经过target_link_libraries(测试 LINK_PUBLIC Boost::program_options)

关于c++ - BOOST_ROOT 在 cmake 配置后的链接阶段不受尊重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54205073/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com