当前位置: 首页 > news >正文

用MSYS2在windows下编译gsl-2.8库用于vs2022调用

一.MSYS2安装

1.介绍

MSYS2 是一个为 Windows 系统提供 Unix 环境的软件开发平台,基于 MinGW 和 MSYS 项目,旨在简化跨平台开发流程。

官网:https://www.msys2.org/

2.具体安装方法请见上篇文章:MSYS2功能、用途及在win10下安装

二.gsl-2.8介绍

1.gsl-2.8简介

全称:GNU Scientific Library(GSL)

版本:当前稳定版为 2.8(发布于 2024 年 5 月)。

定位:专为 C 和 C++ 程序员设计的开源数值计算库,提供广泛的数学算法和工具。

许可证:遵循 GNU GPL,允许自由使用、修改和分发,但需保持代码开源(禁止闭源商业再分发)。

官网:https://www.gnu.org/software/gsl/

2.核心功能与特性

GSL-2.8 包含 1000+ 函数,覆盖以下领域:

基础数学

复数运算、多项式求根、特殊函数(如贝塞尔函数、伽马函数)。

线性代数

向量 / 矩阵操作、矩阵分解(LU、QR)、特征值 / 特征向量计算。

数值分析

数值积分、微分方程求解、插值与拟合、快速傅里叶变换(FFT)。

随机与统计

伪随机数生成、多种概率分布(正态、泊松等)、准随机序列、统计量计算。

优化与拟合

最小二乘拟合、非线性优化、模拟退火算法。

其他工具

小波变换、稀疏矩阵支持、物理常数数据库。

三.gsl-2.8编译为windows库

1.打开安装好的:MSYS2 MINGW64 命令窗口,然后执行编译命令:

cd /D/gsl-latest/gsl-2.8  //D盘下

./configure --prefix=/D/gsl-latest/gsl-2.8/build

make

make install

编译结果:

2.生成lib文件

(1)需要下载pexports.exe

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

然后把pexports.exe放到上面编译生成的dll目录下,执行命令:

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

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

(2)编译生成lib文件

方式一:在VS安装目录下的VC\bin文件夹下可以找到lib.exe文件

或者 在搜索框中输入X64 Native Tools Command Prompt for VS 2022,单击打开可以直接调用lib.exe。

lib /machine:X64 /def:libgsl-28.def

lib /machine:X64 /def:libgslcblas-0.def # 64位

方式二:dlltool.exe可在 MSYS2安装目录下的MinGW\bin文件夹下找到,并执行以下命令进行转换:

D:\msys64\mingw64\bin\dlltool --dllname libgsl-28.dll --def libgsl-28.def --output-lib libgsl-28.lib

D:\\msys64\mingw64\bin\dlltool --dllname libgslcblas-0.dll --def libgslcblas-0.def --output-lib libgslcblas-0.lib

说明:dlltool.exe最好用绝对路径,因为其需要同目录下的其他文件

3.生成结果:

(4)vs2022下测试代码

#include <stdio.h>

#include <gsl/gsl_complex.h>

#include <gsl/gsl_complex_math.h>

#pragma comment(lib, "libgsl-28.lib")

#pragma comment(lib, "libgslcblas-0.lib")

int main(void)

{

gsl_complex a;

gsl_complex b;

GSL_REAL(a) = 1.0;

GSL_IMAG(a) = 2.0;

GSL_SET_COMPLEX(&b, 3.0, 4.0);

printf("%f+%f\n", GSL_REAL(a), GSL_IMAG(a));

printf("%f+%f\n", GSL_REAL(b), GSL_IMAG(b));

return 0;

}

3.总结

   许多基于C语言和C++语言的开源项目库都是在Linux系统中采用gcc编译器开发的,因而在Windows环境下确实较难重新构建,这里利用MSYS2提供的Linux环境便于对开源项目GSL进行生成构建,得到动态链接库dll,利用pexports.exe+dlltool.exe(gcc)或者pexports.exe+lib.exe(vs)(这两种方式任选一种)可将dll转换为lib,从而在Microsoft Visual Studio中进行链接和调用,经过实测,这两种方式生成的lib文件尽管大小不同,但都能够调用执行,因为运行时本质上都有dll文件。

   MinGW(gcc)可支持静态库.a和动态链接库**.dll**;而Visual Studio(msvc)仅支持动态链接库.dll,因此需要使用导入库.lib。

四.gsl库vs编译的其他方法   ---不推荐

1.windows下编译好的gsl库,但是版本太低,只有gsl-1.8的库;

https://gnuwin32.sourceforge.net/packages/gsl.htm

2.GSL官网也明确指出一些开发者提供了一些方法可轻松地在Windows平台上构建GSL库,详情见Building GSL on Windows Using Native Tools中的四种方法。

https://www.gnu.org/software/gsl/extras/native_win_builds.html

(1)Cmake的方法可以尝试,但显示支持到vs2017,用的版本也是GSL2.7

https://github.com/ampl/gsl

http://www.dtcms.com/a/118614.html

相关文章:

  • 打破系统壁垒:CRM、ERP、OA一体化如何重塑企业竞争力
  • 域名系统DNS
  • 直流减速电机控制实验:Simulink应用层开发(3)
  • Ansible:roles角色
  • 物联网平台支持在水务行业使用
  • React 和 JSX 中,这些符号 (=>, <, ? :)的用法
  • 简历EasyExcel相关
  • 【Java中级】11章、枚举 - java引用数据类型,枚举介绍、快速入门,了解枚举类的基本使用方式【1】
  • 基于webGis绘制点、面
  • Python标准库os模块完全指南
  • 安装node.js
  • 1.6-抓包技术(Burp Suite\Yakit抓包\Web、APP、小程序)
  • 蓝桥杯2022年第十三届省赛真题-统计子矩阵
  • ruby基础语法
  • shell脚本 - Linux定时温度监控-软硬件检测 - 服务器温度监控 - 写入日志
  • [Linux]从零开始的ARM Linux交叉编译与.so文件链接教程
  • nginx路径匹配的优先级
  • 条件概率、概率乘法公式、全概率公式和贝叶斯 (Bayes) 公式
  • phpstrom 配置调试 php 项目全流程,弄清一些概念
  • vue项目本地调试使用https
  • 软考案例分析实例答题模板
  • CS内网渗透 - 如何通过冰蝎 Webshell 上线 Weblogic 服务器到 Cobalt Strike 并绕过杀软检测(360、火绒)?
  • 8.2 对话框2
  • 【硬核实战】从零打造智能五子棋AI:JavaScript实现与算法深度解析
  • SpringBoot 基于个性化定制的智慧校园管理系统设计与开发
  • 大模型学习六:‌小米8闲置,通过Termux安装ubuntu做个随身服务器,纯粹碍眼折腾
  • 【MCP-1】MCP是什么,从DEMO入手
  • 从零构建大语言模型全栈开发指南:第五部分:行业应用与前沿探索-5.2.2超级对齐与AGI路径探讨
  • 博途 TIA Portal之1200做从站与调试助手的TCP通讯
  • 深入解析机器学习