如何在Windows系统下编译安装GNU/GSL C语言库
Windows本地编译安装GSL(推荐方案)
本地编译的二进制和后续自研程序兼容性最好,排错成本远低于交叉编译,操作步骤如下:
- 先安装MSYS2环境,安装完成后注意:编译64位程序就打开
MSYS2 MinGW 64-bit终端,编译32位程序打开MSYS2 MinGW 32-bit终端,不要打开默认的MSYS终端,后者编译出的二进制依赖POSIX模拟层,不是原生Windows程序。 - 在打开的终端中执行命令安装基础编译工具链:
执行完根据提示关闭终端重开,再安装对应架构的编译工具集:pacman -Syu --needed base-devel
64位环境执行:
32位环境执行:pacman -S --needed mingw-w64-x86_64-toolchain tarpacman -S --needed mingw-w64-i686-toolchain tar - 下载稳定版GSL源码压缩包,解压后进入源码根目录。
- 执行配置命令,指定安装路径,这里以安装到
C:\gsl为例:
其中./configure --prefix=/c/gsl --enable-shared --enable-static--enable-shared会生成动态链接库(DLL),--enable-static会生成静态库,可根据自己的需求裁剪参数。 - 执行编译,
-j后面跟CPU核心数可以加快编译速度:make -j$(nproc) - (可选)执行编译检查,确认编译产物没有问题:
make check - 执行安装命令:
安装完成后,make installC:\gsl目录下会生成三个子目录:bin(存放GSL对应的DLL文件)、include(存放头文件)、lib(存放链接用的库文件)。后续编译自己的程序时,将include目录加入头文件搜索路径,lib目录加入库搜索路径,链接时添加参数-lgsl -lgslcblas即可,运行程序时把bin目录下的GSL相关DLL放到EXE同目录就能正常运行。
省事方案:如果不需要自定义编译参数,直接在对应架构的MSYS2终端执行对应命令就能直接安装预编译好的GSL,无需手动编译:
64位:
pacman -S mingw-w64-x86_64-gsl
32位:
pacman -S mingw-w64-i686-gsl
安装完成后直接就能在编译时链接GSL,不需要额外配置路径。
Ubuntu下MinGW-w64交叉编译GSL方案
如果必须使用交叉编译,之前编译失败基本是因为没有指定正确的目标架构参数,操作步骤如下:
- 先安装MinGW-w64交叉编译工具链:
sudo apt update && sudo apt install -y mingw-w64 - 下载和本地编译同版本的GSL稳定版源码,解压后进入源码根目录。
- 执行配置命令,编译64位Windows版本时指定host为x86_64架构,安装路径选一个独立目录避免和本地Linux库混淆,这里以安装到
/opt/gsl-mingw64为例:
如果要编译32位版本,把./configure --host=x86_64-w64-mingw32 --prefix=/opt/gsl-mingw64 --enable-shared --enable-static--host参数换成i686-w64-mingw32,安装路径对应调整即可。 - 执行编译和安装:
安装完成后,指定前缀目录下就会生成对应Windows平台可用的头文件、库文件和DLL,后续交叉编译自己的程序时指定该路径下的头文件和库路径即可。make -j$(nproc) sudo make install
注意:交叉编译时务必区分开Linux本地GSL和交叉编译的Windows版GSL的路径,不要混用,否则会出现链接错误或者生成的EXE无法运行的问题。
内容的提问来源于stack exchange,提问作者gudise
相关产品推荐
相关产品推荐

