Qt gsl库配置踩坑记录

devtools/2024/11/14 3:28:36/

想求解非线性方程组,之前使用拟牛顿法写过相关的matlab代码,这次想移植到C++代码,网上说gsl库挺好用的,于是我也想试一下。相关参考:

  1. 【C++】GSL(GNU Scientific Library) 的安装及在 Visual Studio 2017 中的使用
  2. QT5使用mingw64和mingw32编译数学库GSL
  3. 有没有C/C++解非线性方程组的库? - Narcissu的回答 - 知乎
  4. QT5环境下配置GSL数学库

配置:
我使用的是minGW7.3.0编译器(记得添加minGW的bin目录的环境变量),下载的是gsl2.5的版本,我在当前的目录使用cmd结果运行上述博客里说的:

./configure

结果报错,我检查了一下我的minGW,确实是安装了,问题出在我少装了msys,msys获取网站:
MinGW-builds,安装好以后运行msys目录下的msys.bat,cd进入到gsl 文件夹(在里面会看到configure文件),

./configure && make && make install

安装非常完美
在这里插入图片描述
然后把msys下面的include、lib和bin三个文件夹复制到自己的项目的目录下面,比如我这里使用的是Qt,再添加一个pri文件,把这些文件包含进来:

DEFINES += GSL_DLLINCLUDEPATH += $$PWD/includeLIBS += -L$$PWD/lib -llibgsl
LIBS += -L$$PWD/lib -llibgslcblas

在工程的pro里记得也把这个pri文件包含进来:

INCLUDEPATH += $$PWD/gsl/ 
include($$PWD/gsl/gsl.pri)
DISTFILES += gsl/gsl.pri 

按上面参考4测试一下程序

#include <iostream>
#include <cmath>
#include <gsl/gsl_sf_bessel.h>
using namespace std;int main(int argc, char *argv[])
{double x = 10.0;double y = gsl_sf_bessel_J0(x);cout << "J0(" << x << ") = " << y << endl;return 0;
}

完美
在这里插入图片描述
测试了一下参考3的关于gsl的代码,它提示说:

error: undefined reference to `__imp_gsl_multiroot_fsolver_hybrids

在参考2可以找到解决的方案,在include目录下找到对应的库,这里对应的明显是gsl_multiroots.h,然后我们进去这个文件,找到gsl_multiroot_fsolver_hybrids

注释掉的是原来的语句,我们把GSL_VAR 改为extern就可以了:

//GSL_VAR const gsl_multiroot_fsolver_type * gsl_multiroot_fsolver_hybrids;
extern const gsl_multiroot_fsolver_type * gsl_multiroot_fsolver_hybrids;

然后记得clear项目然后重新构建,时间可能比较久,OK也跑起来了!
在这里插入图片描述
可以试着用这个库解非线性方程组了(心满意足)


http://www.ppmy.cn/devtools/11017.html

相关文章

如何用微信小程序实现远程控制无人售货柜

如何用微信小程序实现远程控制无人售货柜呢&#xff1f; 本文描述了使用微信小程序调用HTTP接口&#xff0c;实现控制无人售货柜&#xff0c;独立控制售货柜、格子柜的柜门。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能WiFi…

ubuntu系统下opencv的编译安装

ubuntu系统下opencv的编译安装 参考https://blog.csdn.net/KIK9973/article/details/118830187 1 安装准备 1.1安装依赖环境(Ubuntu18.04) 下载opencv的依赖&#xff0c;其中第三行的依赖是可选的&#xff0c;前两行的依赖则是必要的。 sudo apt-get install build-essent…

智能未来工厂的发展趋势

随着科技的飞速发展和工业4.0的深入推进&#xff0c;智能未来工厂正逐渐成为制造业发展的新引擎。智能未来工厂以其高效、灵活、可持续的生产模式&#xff0c;引领着制造业向更高层次、更广阔领域迈进。本文将探讨智能未来工厂的发展趋势。 一、技术创新驱动智能未来工厂发展 技…

DenseDiffusion:Dense Text-to-Image Generation with Attention Modulation

1 研究目的 该文献的研究目的主要是&#xff1a; 探讨一种更为广泛的调制方法&#xff0c;通过设计多个正则化项来优化图像合成过程中的空间控制。论文的大致思想是&#xff0c;在现有的基于数据驱动的图像合成系统基础上&#xff0c;通过引入更复杂的调制策略&#xff0c;实现…

埋点,自己写插件,自己写的按钮埋点,掘金同款投递简历

20分钟掌握 Vite 插件开发 - 掘金 vite的生命周期啥的 1.浏览器的控制台输出有样式的字 // const randomLetterPlugin ()>{ // const letters [wwwwwww,000000000000,888888888888]; // //随机获取一个字符并打印 // const printRandomLetter ()>{ // …

用html写一个窗口风景动画

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>窗边风景动画</title><link rel"stylesheet" href"./style.css"> </head> <body><!-- 窗户 -->&l…

Redis入门到通关之Redis实现Session共享

文章目录 ☃️前期概要☃️基于Session实现登录方案☃️现有方案存在的问题☃️Redis代替Session的业务流程❄️❄️设计key的结构❄️❄️设计key的具体细节❄️❄️整体访问流程 欢迎来到 请回答1024 的博客 &#x1f353;&#x1f353;&#x1f353;欢迎来到 请回答1024的博…

Python异步任务框架CeleryCelery

Python异步任务框架Celery Celery简介第一个CeleryCelery基本概念任务TasksCelery基本概念消息代理Message BrokersCelery基本概念工作者&#xff08;Workers&#xff09;Celery基本概念任务调度&#xff08;Task Scheduling&#xff09;Celery apicelery命令Celery应用Applic…