Boost Linker 问题

Boost Linker Issues

提问人:Rahul 提问时间:10/20/2020 最后编辑:Rahul 更新时间:9/8/2021 访问量:89

问:

我正在使用 Boost 库,但遇到了一些链接器问题。目前我的代码输出如下:

未定义的架构符号 x86_64: “boost::p rogram_options::to_internal(std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > const&)”,引用自: std::__1::vector<std::__1::basic_string<char, std::__1::char_traits, std::__1::分配器>, std::__1::分配器<std::__1::basic_string<char, std::__1::char_traits, std::__1::分配器 > > > boost::p rogram_options::to_internal<std::__1::basic_string<char, std::__1::char_traits, std::__1::train_model_main.cc.o 中的 allocator > >(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > > > const&) “boost::p rogram_options::variables_map::variables_map()”,引用自: train_model_main.cc.o 中的_main(列表继续)

在底部,我的代码是这样说的:

ld:找不到用于体系结构x86_64的符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

我正在尝试使用 Boost 的 program_options 库,但链接步骤似乎失败了。这是我在CMake文件中链接的方式:

find_package(Boost 1.73.0 COMPONENTS program_options REQUIRED)
if(Boost_FOUND)
    include_directories(${Boost_INCLUDE_DIRS})
    add_executable(main ./apps/something.cc)
    target_link_libraries( main program_options)
endif()

我相信我正确地链接了库,那么是什么原因导致了这个问题?

linker-errors clion boost-program-options

评论


答:

0赞 user8197171 10/20/2020 #1

我将复制并粘贴 cmake 话语中的答案:https://discourse.cmake.org/t/boost-linker-issues/2030

“我相信我正确地链接了库”,不幸的是没有。您需要使用 Boost::p rogram_options 引用完整的目标名称,包括命名空间前缀。您可以省略显式添加Boost_INCLUDE_DIRS,因为目标定义确实包含此信息。所以你的台词看起来像:“ - Volker Enderlein

if(Boost_FOUND)
    add_executable(main ./apps/something.cc)
    target_link_libraries(main PUBLIC Boost::program_options)
endif()

评论

0赞 Rahul 10/20/2020
刚刚试过这个,但没有用。会尝试在话语上提问。
0赞 g.stevo 9/8/2021 #2

架构不匹配是这里的问题。将您正在构建的应用程序的编译与 boost 程序选项相匹配

如何在 Windows 上构建 x64 Boost 库?

在您的情况下,地址需要设置为 64 或使用 64 位二进制文件