基于MSYS2在windows下编译gsl-2.8库并在vs2022中调用
然后第二步,务必要打开vs专用的命令行进行编译,不然会找不到lib.exe,操作方法是直接在电脑的开始菜单中输入 X64 Native Tools Command Prompt for VS 2022,单击打开就可以直接调用lib.exe了。首先,在VS安装目录下的VC\bin文件夹下可以找到lib.exe文件,我的文件路径是:D:\Program Files\vs2022\IDE\VC\Tool
一、下载安装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的步骤就全部结束了,欢迎批评指正。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)