win11使用Cmake和VS2022编译C++开源函数nlopt动态函数库

本文详细描述了作者在使用VisualStudio2022与开源C++库nlopt进行最小二乘法计算时,遇到的编译问题及解决步骤,包括下载cmake、安装VS2022、配置动态链接库等关键步骤。
摘要由CSDN通过智能技术生成

最近在使用vs2022进行最小二乘法计算,要用到免费的开源c++函数库nlopt,网上的教程比较陈旧,尝试了很多方法,整个过程比较艰辛,下面记录一下我的编译过程:

1.Nlopt简介(nlopt文档:NLopt - NLopt Documentation

NLopt 是一个用于非线性优化的免费/开源库,为在线可用的许多不同的免费优化例程以及各种其他算法的原始实现提供了一个通用接口。其功能包括:

  • 可从 CC++FortranMatlab 或 GNU OctavePythonGNU GuileJuliaGNU RLuaOCamlRust 和 Crystal 调用。
  • 许多不同算法的通用接口 - 只需更改一个参数即可尝试不同的算法。
  • 支持大规模优化(一些算法可扩展到数百万个参数和数千个约束)。
  • 全局和局部优化算法。
  • 仅使用函数值(无导数)的算法,以及利用用户提供的梯度的算法。
  • 用于无约束优化、边界约束优化和一般非线性不等式/相等约束的算法。
  • GNU LGPL 下的自由/开源软件(以及 NLopt 某些部分的宽松许可证)。

2.需要做的下载安装准备

2.1下载安装cmake,并将其配置在系统环境中,具体cmake安装网上教程很多,可以自己去找,下面是我参考的一篇文章,侵权删除:

Windows下CMake的下载与安装详解_cmake下载-CSDN博客

2.2VS2022安装,并确保安装python环境,matlab已经安装;

2.3nlopt下载;

nlopt是一个开源函数库,在github中下载,我下载的版本是2.7.1,下载链接为:stevengj/nlopt:非线性优化库,包装了许多用于全局和局部、约束或无约束优化的算法 (github.com)

3.具体编译过程

具体编译过程分为两步:cmake编译和vs导出动态库

3.1Cmake编译

(1)将nlopt文件夹移动到需要的位置,如果你下载的是压缩包,就将其解压再移动至目标位置;

解压后目录如图:

(2)在这个目录中建立一个文件夹,用来储存编译文件,我这里命名为“build”:

(3)打开安装好的cmake(gui),将目录中的CMakeLists拖入cmake(gui)界面,他会自己识别安装目录,这里修改编译目标文件夹方便区分,修改为buid文件夹,同时勾选advanced和grouped:

(4)选择文件夹后,点击CMake界面的Config按钮,第一次会选择编译器等,我的是VS 17 2022,继续点击开始配置:

配置过程中对话框会显示报警,只要没有error就可以继续,配置完后对话框会显示这两段输出:

(5)接着看ENTRY部分:

 确保勾选了Ungroup Entries中的BUILD_SHARED_LIBS,这样能编译出共享库也就是动态链接库dll

(6)确保各个entry的路径正确并正确设置后(有的参考资料显示会有matlab路径不识别,我的是没有进行修改的),点击cmake界面的Genrate按钮,对话框会输出下段文字,显示正常进行:

这里cmake的任务就告一段落了,点击OPEN_PROJECT进入vs界面;

3.2VS2022编译动态库

打开VS后,显示如图:

(1)在右侧解决方案栏右键,选择“生成解决方案”就可以导出动态库了

注:配置不要选择debug,他会报错,应该是配置文件的问题:

应该选择release,再生成结局方案就会成功;

(2)在build文件夹里面会多出一个release文件夹,里面是编译成功的动态库:

将动态库和build中的nlopt.hpp和nlop\src\api中的nlopt.h复制到需要的文件夹进行测试使用,去网上找一点nlopt函数进行测量,运行成功则调用成功。

动态库的调用参考:C++动态链接库(DLL)的创建和调用(VS2019)_c++动态链接库怎么调试-CSDN博客

在编译过程中参考了:

NLopt优化函数库Windows安装编译和MATLAB应用指南 - 知乎 (zhihu.com)

  • 15
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值