提问人:Rahul 提问时间:10/20/2020 最后编辑:Rahul 更新时间:9/8/2021 访问量:89
Boost Linker 问题
Boost Linker Issues
问:
我正在使用 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()
我相信我正确地链接了库,那么是什么原因导致了这个问题?
答:
我将复制并粘贴 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()
评论
架构不匹配是这里的问题。将您正在构建的应用程序的编译与 boost 程序选项相匹配
在您的情况下,地址需要设置为 64 或使用 64 位二进制文件
评论