CMake已找到Boost但链接失败:Program_Options组件链接问题求助
链接Boost 1.81 Program_Options组件时出现链接错误
我正在按照Boost官网的Program_Options教程实践,仅尝试链接program_options组件。已从GitHub拉取并编译了Boost 1.81,CMake能找到Boost库但无法完成链接。
相关代码文件
intensity.cpp
#include <iostream> #include <boost/program_options.hpp> namespace po = boost::program_options; int main(int ac, char *av[]){ po::options_description desc("allowed options"); desc.add_options() ("help", "--intesity: set intesity levels") ("intensity", po::value<int>(), "set intensity level") ; po::variables_map vm; po::store(po::parse_command_line(ac, av, desc), vm); po::notify(vm); if(vm.count("help")) { std::cout << desc << "\n"; return 1; } if(vm.count("intensity")) { std::cout << "intensity level set to " << vm["intensity"].as<int>() << "\n"; } else { std::cout << "intesity was not set\n"; } return 0; }
CMakeLists.txt
cmake_minimum_required(VERSION 3.15) project(Intensity VERSION 1.0) set(CMAKE_CXX_COMPILER clang) set(BOOST_ROOT "/Users/nabiel.kandiel/code/thirdparty/boost_1_81_0") set(Boost_USE_STATIC_LIBS OFF) set(BOOST_USE_MULTITHREADED ON) set(BOOST_USE_STATIC_RUNTIME OFF) find_package(Boost 1.81 REQUIRED COMPONENTS program_options) add_executable(intensity intensity.cpp) target_link_libraries(intensity Boost::program_options)
CMake配置输出
NKandiel-REMM22:build nabiel.kandiel$ cmake ../ -- The C compiler identification is AppleClang 14.0.0.14000029 -- The CXX compiler identification is AppleClang 14.0.0.14000029 -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc - skipped -- Detecting C compile features -- Detecting C compile features - done -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ - skipped -- Detecting CXX compile features -- Detecting CXX compile features - done -- Found Boost: /opt/homebrew/lib/cmake/Boost-1.81.0/BoostConfig.cmake (found suitable version "1.81.0", minimum required is "1.81") found components: program_options -- Configuring done -- Generating done -- Build files have been written to: /Users/nabiel.kandiel/code/imageProc/build
构建错误输出
NKandiel-REMM22:build nabiel.kandiel$ cmake --build . [ 50%] Building CXX object CMakeFiles/intensity.dir/intensity.cpp.o [100%] Linking CXX executable intensity Undefined symbols for architecture arm64: "std::logic_error::what() const", referenced from: vtable for boost::program_options::error in intensity.cpp.o "std::runtime_error::what() const", referenced from: vtable for boost::wrapexcept<boost::bad_function_call> in intensity.cpp.o vtable for boost::bad_function_call in intensity.cpp.o "std::__1::__vector_base_common<true>::__throw_length_error() const", referenced ..... std::__1::allocator<boost::program_options::basic_option<char> >::deallocate(boost::program_options::basic_option<char>*, unsigned long) in intensity.cpp.o ... ld: symbol(s) not found for architecture arm64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make[2]: *** [intensity] Error 1 make[1]: *** [CMakeFiles/intensity.dir/all] Error 2 make: *** [all] Error 2
我尝试过多种网上找到的CMakeLists.txt配置,但均无法解决问题,恳请帮助。
内容的提问来源于stack exchange,提问作者Nabiel Kandiel
相关产品推荐
相关产品推荐

