一、下载安装msys2

1、msys2下载链接:E-File

2、msys2安装

        msys2的具体安装步骤本人并没有研究,刚开始本着偷懒的想法直接在tb上找了一家店帮忙安装,但由于他主要精通vscode调用,所以并没有后续的东西。写这边文章主要是记录vs调用gsl的心得,如果能为有需要者带来一点帮助就更好了。

        所以msys2安装可以直接找tb,也可以参考@AI+程序员在路上 的笔记MSYS2功能、用途及在win10下安装-CSDN博客

二、将gsl编译为Windows库

        如果需要在visual studio中使用GSL,本质上需要解决两个核心问题,一是将在gcc编译器也就是Linux环境下的gsl库通过msys2编译为windows可用的版本;二是由于vs特殊的用法只能包含.h和.lib文件,所以需要利用pexports.exe+lib.exe(vs)的方法生成lib文件。这里依旧参考@AI+程序员在路上  的笔记 用MSYS2在windows下编译gsl-2.8库用于vs2022调用-CSDN博客

1、gsl-2.8编译为Windows库

        此操作参考1.2,编译完成之后会得到这样的文件

路径一般在是C:\msys64\mingw64\bin

2、生成lib文件

(1)下载pexports.exe

https://sourceforge.net/projects/mingw/files/MinGW/Extension/pexports/pexports-0.47/

将下载下来的文件进行解压缩,将得到的pexports.exe放到上面编译生成的dll目录下。

然后在该目录下的文件资源管理器的地址栏输入cmd并按enter,就直接在当前目录打开命令提示符(cmd),然后输入:

pexports  libgsl-28.dll >libgsl-28.def

pexports  libgslcblas-0.dll >libgslcblas-0.def

然后可以在该目录下检查是否正确生成libgsl-28.def文件和libgslcblas-0.def。

然后这个步骤就成功了。

(2)编译生成lib文件

首先,在VS安装目录下的VC\bin文件夹下可以找到lib.exe文件,我的文件路径是:D:\Program Files\vs2022\IDE\VC\Tools\MSVC\14.39.33519\bin\Hostx64\x64\lib.exe。

然后第二步,务必要打开vs专用的命令行进行编译,不然会找不到lib.exe,操作方法是直接在电脑的开始菜单中输入 X64 Native Tools Command Prompt for VS 2022  ,单击打开就可以直接调用lib.exe了。

第三步也是最重要的一步,就是将libgsl-28.def生成为libgsl-28.lib + libgsl-28.exp将libgslcblas-0.def生成为libgslcblas-0.lib + libgslcblas-0.exp并且一定要尽量生成在上述2.1一直提到的目录下,我的是C:\msys64\mingw64\bin。具体操作步骤是:在第二步调用出来的命令行中输入:
lib /machine:X64 /def:"C:\msys64\mingw64\bin\libgsl-28.def" /out:"C:\msys64\mingw64\bin\libgsl-28.lib"
lib /machine:X64 /def:"C:\msys64\mingw64\bin\libgslcblas-0.def" /out:"C:\msys64\mingw64\bin\libgslcblas-0.lib"

然后可以在该目录下检查是否正确生成libgsl-28.lib、libgsl-28.exp文件和libgslcblas-0.lib、libgslcblas-0.exp。

然后这个步骤就成功了。

然后最终C:\msys64\mingw64\bin下的文件就是如图所示:

三、vs2022调用gsl

1、第一步先创建你的vs项目,不需要一开始就尝试包含gsl库,建议第一步先写一个成功的案例,正确运行得到exe文件,比如:

#include <iostream>
using namespace std;

int main()
{
    cout << "hello world" << endl;
    system("pause");
    return 0;
}

2、第二步再开始尝试包含gsl库,首先需要在项目目录下建立子目录。在项目根目录(如 D:\MyProject\)下创建以下子目录,并复制对应文件:

(1)头文件:从 C:\msys64\mingw64\include\gsl\ 复制整个 gsl 文件夹到 MyProject\gsl\include\

(2)库文件:将之前生成的 libgsl-28.lib 和 libgslcblas-0.lib 复制到 MyProject\gsl\lib\

(3)DLL文件:从 C:\msys64\mingw64\bin\ 复制 libgsl-28.dll 和 libgslcblas-0.dll 到 MyProject\gsl\dll\。

3、第三步配置vs项目

(1)打开项目属性:右键项目 → 属性 → 确保配置为 Debug|x64 或 Release|x64

(2)设置头文件路径C/C++ → 常规 → 附加包含目录D:\MyProject\gsl\include; // 指向包含gsl文件夹的父目录

(3)设置库文件路径链接器 → 常规 → 附加库目录D:\MyProject\gsl\lib;

(4)添加依赖的库链接器 → 输入 → 附加依赖项libgsl-28.lib;libgslcblas-0.lib;

4、处理运行时的dll文件

 将DLL文件复制到 可执行文件输出目录(如 x64\Debug\),确保程序运行时能找到它们。

 手动复制:将 MyProject\gsl\dll\ 下的 .dll 文件复制到 MyProject\x64\Debug\

5、进行测试

#include <stdio.h>
#include <gsl/gsl_sf_bessel.h>  // 使用GSL的贝塞尔函数

int main() {
    double x = 5.0;
    double y = gsl_sf_bessel_J0(x);  // 计算0阶贝塞尔函数
    printf("J0(%g) = %.12f\n", x, y);
    return 0;
}

在这个过程中需要注意,vs项目的路径一定要全是英文,且不能有特殊符号和空格,尽量只写英文大小写和数字即可。

四、总结

        至此,利用vs2022调用gsl-2.8的步骤就全部结束了,欢迎批评指正。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐