Qt gsl库配置踩坑记录

想求解非线性方程组,之前使用拟牛顿法写过相关的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_DLL

INCLUDEPATH += $$PWD/include

LIBS += -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也跑起来了!
在这里插入图片描述
可以试着用这个库解非线性方程组了(心满意足)

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Qt5环境下配置GSL(GNU Scientific Library),需要以下步骤: 1. 下载GSL的源代码,可以从GSL官方网站(https://www.gnu.org/software/gsl/)下载最新版本的源代码。 2. 解压下载的源代码文件,并将解压后的文件夹重命名为"gsl"。 3. 打开Qt5的开发环境,创建一个新的Qt项目。 4. 将解压后的gsl文件夹复制到Qt项目目录下。 5. 在Qt项目中,打开.pro文件(Qt的项目配置文件),在文件的末尾添加以下内容: ```bash INCLUDEPATH += $$PWD/gsl LIBS += -L$$PWD/gsl/.libs -lgsl -lgslcblas -lm ``` 上述代码将会告诉Qt编译器在编译时去找到GSL所在的位置。 6. 保存并关闭.pro文件。 7. 在Qt项目中,打开main.cpp文件,添加以下代码: ```cpp #include <gsl/gsl_math.h> #include <gsl/gsl_sf_bessel.h> int main(int argc, char *argv[]) { gsl_sf_bessel_J0(5.0); // 使用GSL函数进行示例计算 return 0; } ``` 为了确保GSL已经正确安装并能够在Qt项目中使用,可以使用一些GSL函数进行示例计算。 8. 保存并运行Qt项目,如果没有报错信息并成功运行,说明在Qt5环境下配置GSL已经完成。 需要注意的是,上述步骤假设你已经正确地安装了Qt5开发环境,并且你的系统已经配置了正确的编译器和链接器。另外,在上述步骤中使用的路径和文件名是基于示例情况,可能需要根据实际情况进行调整。 ### 回答2: 在Qt5环境下配置GSL(GNU科学)可以按照以下步骤进行: 1. 首先,从GSL的官方网站(https://www.gnu.org/software/gsl/)下载最新的源代码压缩包。 2. 解压缩源代码,并进入解压后的文件夹。 3. 打开终端,并切换到解压后的文件夹中。 4. 在终端中运行以下命令来配置GSL的安装路径: ```shell ./configure --prefix=<安装路径> ``` 其中,`<安装路径>`是你希望GSL安装的目标路径,可以是你的系统默认路径,或者你自己选择的其他路径。 5. 运行以下命令进行编译: ```shell make ``` 这将会编译GSL的源代码。 6. 运行以下命令进行安装: ```shell make install ``` 这将会将GSL安装到你指定的安装路径中。 7. 完成安装后,你可以在Qt项目中引入GSL的头文件,并链接GSL文件。例如,在Qt的`.pro`文件中添加以下代码: ```shell INCLUDEPATH += <安装路径>/include LIBS += -L<安装路径>/lib -lgsl ``` 其中,`<安装路径>`是你之前配置GSL的安装路径。 8. 重新编译你的Qt项目,确保能够成功链接GSL。 以上是在Qt5环境下配置GSL的简要步骤。通过按照这些步骤配置GSL,你就可以在Qt项目中使用GSL进行科学计算了。 ### 回答3: 在Qt5环境下配置GNU Scientific Library (GSL) 需要进行以下步骤: 1. 下载GSL:首先,从GSL的官方网站(https://www.gnu.org/software/gsl/)下载最新版本的GSL文件。 2. 解压缩GSL:将下载的GSL文件解压缩到您选择的目录。 3. 配置Qt项目文件:打开您的Qt项目文件(.pro文件),并添加以下行: ``` INCLUDEPATH += /path/to/gsl/include LIBS += -L/path/to/gsl/lib -lgsl -lgslcblas ``` 您需要将上述路径替换为您解压缩GSL的实际路径。这些行将告诉Qt编译器在编译和链接项目时要包含GSL的头文件和链接。 4. 构建您的项目:保存并重新加载Qt项目文件,并构建您的项目。编译器应该能够找到GSL的头文件和链接,并将其与您的项目一起编译和链接。 5. 测试GSL:为了确保成功配置GSL,您可以在Qt项目中添加一些测试代码,并使用GSL的功能进行编程。例如,您可以使用GSL的数学函数、向量和矩阵操作等。 6. 运行项目:在构建成功后,您可以运行您的Qt项目,并验证GSL是否按预期工作。 请注意,具体目录和名称可能会根据您的操作系统和GSL的版本而有所不同。在配置过程中请确保路径和名称是正确的。 希望以上步骤能够帮助您在Qt5环境下成功配置GSL。如果您遇到任何问题,请查阅GSL文档或参考在线资源来获取更详细的指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值