Windows Conda环境下boost::program_options报Bad Allocation错误求助
Windows下Conda环境+VS2019编译Boost Program Options程序报错问题
环境与代码
CMakeLists.txt
cmake_minimum_required(VERSION 3.10) project(MyProject) find_package(Boost REQUIRED COMPONENTS program_options) include_directories(${Boost_INCLUDE_DIRS}) add_executable(my_program po_demo.cpp) target_link_libraries(my_program Boost::program_options)
示例应用代码
#include <iostream> #include <boost/program_options.hpp> namespace po = boost::program_options; int main(int argc, char** argv) { try { po::options_description desc("Allowed options"); desc.add_options() ("help", "produce help message") ("input-file", po::value<std::string>(), "set input file") ("output-file", po::value<std::string>(), "set output file") ("verbose,v", "enable verbose output") ("optimization-level", po::value<int>()->default_value(0), "set optimization level") ; po::variables_map vm; po::store(po::parse_command_line(argc, argv, desc), vm); po::notify(vm); if (vm.count("help")) { std::cout << "Usage: program_name [options]\n"; std::cout << desc; return 0; } } catch (const po::error& ex) { std::cerr << "Error: " << ex.what() << std::endl; return 1; } catch (std::exception ex) { std::cerr << "Error: " << ex.what() << std::endl; return 1; } catch (...) { std::cerr << "Error unknown" << std::endl; return 1; } return 0; }
操作步骤(在miniforge3提示符下执行)
conda create -n potest conda activate potest conda install cxx-compiler libboost-devel cmake make mkdir build cd build cmake -DCMAKE_PREFIX_PATH=%CONDA_PREFIX% -G "Unix Makefiles" .. make
错误现象
- 编译完成后运行程序,第一行即抛出错误:
Error: bad allocation - 将
po::options_description desc("Allowed options");修改为无参构造po::options_description desc;后,程序可运行至po::notify(vm);处,此时抛出错误:Error: vector too long,同时弹出系统错误对话框
补充:CMake已成功检测到环境中的Boost库,通过dumpbin工具确认编译后的程序依赖boost_program_options.dll等文件。
疑问
- 上述场景是否本应正常运行?
- Conda安装的Boost库与当前使用的VS2019编译器是否存在兼容性问题?
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

