当前位置: 首页 > news >正文

VS Code配置MinGW64编译非线性优化库NLopt

VS Code用MinGW64编译C++代码安装MSYS2软件并配置非线性优化库NLopt和测试引用库代码的完整具体步骤。


1. 安装MSYS2

  1. 下载安装程序:
    • 访问 MSYS2官网
    • 下载 msys2-x86_64-xxxx.exe 并运行
  2. 完成安装:
    • 默认安装路径:C:\msys64
    • 安装完成后,在开始菜单中打开 “MSYS2 UCRT64”(或MinGW64)
  3. 更新系统包:
    pacman -Syu
    
    (若提示关闭终端,重启MSYS2后再次运行 pacman -Syu

2. 安装MinGW64工具链

在MSYS2终端中执行:

pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain
  • 出现提示时,输入 all 并按回车安装全部组件
  • 验证安装:g++ --version(应显示UCRT MinGW64版本)

3. 安装NLopt库

在MSYS2终端中执行:

pacman -S mingw-w64-ucrt-x86_64-nlopt

库文件会自动安装到MSYS2的 /mingw64 目录。


4. 配置VS Code

4.1 安装扩展
  • C/C++ (Microsoft)
  • Code Runner(可选,简化运行)
4.2 配置环境变量

将MinGW64的bin目录添加到系统PATH

  1. 打开系统环境变量设置
  2. Path中添加:
    C:\msys64\ucrt64\bin   # 根据实际安装路径调整
    
4.3 配置C++编译环境
  1. 创建项目文件夹(如 nlopt_test
  2. 在VS Code中打开此文件夹
  3. 创建 main.cpp 文件(测试代码见下一步)

5. 测试NLopt库

5.1 测试代码 (main.cpp)
#include <iostream>
#include <nlopt.hpp>double objective(unsigned n, const double* x, double* grad, void* data) {if (grad) {grad[0] = 2 * x[0];grad[1] = 2 * x[1];}return x[0] * x[0] + x[1] * x[1];
}int main() {nlopt::opt opt(nlopt::LD_LBFGS, 2);  // 使用L-BFGS算法opt.set_min_objective(objective, nullptr);opt.set_xtol_rel(1e-6);  // 设置容差std::vector<double> x = {1.5, 2.5};  // 初始点double minf;try {nlopt::result result = opt.optimize(x, minf);std::cout << "最小值: " << minf << " at ("<< x[0] << ", " << x[1] << ")\n";} catch (std::exception& e) {std::cerr << "优化失败: " << e.what() << std::endl;}return 0;
}
5.2 配置编译任务 (tasks.json)
  1. Ctrl+Shift+P > “Tasks: Configure Task” > "g++.exe"
  2. 替换生成的 tasks.json 内容:
{"version": "2.0.0","tasks": [{"type": "cppbuild","label": "Build with NLopt","command": "g++","args": ["-fdiagnostics-color=always","-g","${file}","-o","${fileDirname}/${fileBasenameNoExtension}.exe","-I", "C:/msys64/ucrt64/include",  // NLopt头文件路径"-L", "C:/msys64/ucrt64/lib",      // NLopt库路径"-lnlopt",                         // 链接NLopt库"-lm"                              // 数学库(可选)],"options": {"cwd": "${fileDirname}"},"group": "build","problemMatcher": ["$gcc"]}]
}
5.3 编译与运行
  • 编译:按 Ctrl+Shift+B 选择 "Build with NLopt"
  • 运行
    • 终端中手动执行生成的可执行文件,或
    • 使用Code Runner扩展(按 Ctrl+Alt+N

6. 验证输出

成功运行后应输出:

最小值: 0 at (0, 0)

常见问题解决

  1. 头文件/库找不到

    • 检查 tasks.json 中的 -I-L 路径是否正确
    • 确认MSYS2安装路径(默认为 C:\msys64
  2. 链接错误

    • 确保 -lnlopt 写在源代码文件名之后
    • 添加 -lm 链接数学库(MinGW通常自动链接)
  3. 运行时DLL缺失

    • C:\msys64\ucrt64\bin 添加到系统 PATH
    • 或复制 libnlopt-0.dll 到可执行文件目录
  4. 更新库版本

    pacman -Syu mingw-w64-ucrt-x86_64-nlopt
    

提示:若使用非UCRT版本(如传统MinGW64),替换所有路径中的 ucrt64mingw64

http://www.lryc.cn/news/622638.html

相关文章:

  • AI云电脑盒子技术分析——从“盒子”到“算力云边缘节点”的跃迁
  • JetPack系列教程(八):PDF库——让Android应用也能优雅“翻页”
  • 面试问题详解一:什么是 Qt?
  • 数字分类:机器学习经典案例解析
  • 电路方案分析(二十一)笔记本电脑散热风扇参考设计
  • Dify 从入门到精通(第 38/100 篇):Dify 的实时协作功能
  • 日语学习-日语知识点小记-进阶-JLPT-N1阶段蓝宝书,共120语法(2):11-20语法
  • 【学习嵌入式day-26-线程间通信】
  • 音视频学习(五十四):基于ffmpeg实现音频重采样
  • 学习游戏制作记录(制作系统与物品掉落系统)8.16
  • Redis 04 Reactor
  • 【Java web】Servlet 详解
  • 数据可视化怎么结合数字孪生?实战心得:从数据到场景的 3 步走
  • 学习嵌入式第三十天
  • WSL中占用磁盘空间大问题解决
  • 通过rss订阅小红书,程序员将小红书同步到自己的github主页
  • 消息中间件Tibco 和 Kafka 及 Pulsar
  • 【LeetCode 热题 100】70. 爬楼梯——(解法二)自底向上
  • 《从入门到精通:Kafka核心原理全解析》
  • 博弈论07——Lemke-Howson 算法
  • EXTI外部中断的执行逻辑|以对射式红外传感器计次为例
  • 九尾狐未来机械锂晶核
  • 【数据结构初阶】--排序(五):计数排序,排序算法复杂度对比和稳定性分析
  • 0815 UDP通信协议TCP并发服务器
  • JavaEE 初阶第十九期:网络编程“通关记”(一)
  • MM-Spatial和Spatial-MLLM论文解读
  • 使用IntersectionObserver实现页面右侧运营位区域固定,和页面列表数据分页加载
  • Java后台生成多个Excel并用Zip打包下载
  • 深入剖析 TOTP 算法:基于时间的一次性密码生成机制
  • Mac (三)如何设置环境变量