Windows下MSYS2中编译OpenBLAS过程记录

OpenBLAS(https://github.com/xianyi/OpenBLAS)目前已经提供了CMakeLists.txt,在Windows下可以通过cmake生成Makefile脚本,然后用MinGW或GCC编译。
但是,CMakeLists.txt中已经有警告申明,cmake支持还在实验中,并不会生成与OpenBLAS自带的Makefiles相同的内容,而且只支持32位编译,而且目前版本的CMakeLists.txt并没有提供install功能(而这也是我需要的)。

message(WARNING “CMake support is experimental. This will not produce the same Makefiles that OpenBLAS ships with. Only x86 support is currently available.”)
https://github.com/xianyi/OpenBLAS/blob/develop/CMakeLists.txt

这诸多限制,带来问题就是用在windows下用cmake编译OpenBLAS并不方便,也不完全满足工程化要求。

好在OpenBLAS官网上提供了关于在windwos下编译的说明文件《How to use OpenBLAS in Microsoft Visual Studio》,看了这篇文章我搞明白了,在Windows下编译OpenBLAS正确的打开方式是在MSYS2下用MinGW编译。

#MSYS2是什么?

Minimal GNU(POSIX)system on Windows,是MinGW提供的一个小型的GNU环境,包括基本的bash,make等等。与Cygwin大致相当。

MSYS的官网 http://www.mingw.org/wiki/MSYS

简单说MSYS就相当于一个在Windows下运行的linux bash shell环境,支持绝大部分linux常用命令,说得更明白点,就是linux下的sh脚本可以在这个环境下执行,linux下的Makfile也可以在这个环境下用MinGW编译
这里写图片描述

而MSYS2 是一个独立项目,它重写了MSYS, MSYS2安装更简单,使用更方便,还提供pacman工具进行软件包的安装管理(就像ubuntu 的apt-get,centos 的 yum),

MSYS2官网 http://www.msys2.org/

所以有了MSYS2的帮助再加上MinGW,我们可以直接在Windows下make 编译OpenBLAS的Makefile,而不需要用cmake

MSYS2安装

安装MSYS2很简单,去这里下载.tar.xz或.exe http://repo.msys2.org/distrib/
.tar.xz文件解压出来就可以了,当然你也可以下载.exe文件执行安装(这要写Windows注册表)
我选择直接解压.tar.xz文件来安装

安装MinGW编译器

MSYS2本身的pacman可以提供软件安装功能(参见上面MSYS2的官网上的示例),通过pacman就可以安装mingw-w64提供的mingw编译器。

# 安装 mingw64 64位编译器
$ pacman -S mingw-w64-x86_64-gcc
# 安装 mingw32 32位编译器
$ pacman -S mingw-w64-i686-gcc

你也可以到 mingw-w64(http://www.mingw-w64.org/) 或mingw (http://www.mingw.org/)官网下载你需要的编译器版本

这里给出mingw-w64提供的32/64位编译器(5.4.0 posix)的下载地址:
mingw32编译器:
https://nchc.dl.sourceforge.net/project/mingw-w64/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/5.4.0/threads-posix/dwarf/i686-5.4.0-release-posix-dwarf-rt_v5-rev0.7z
mingw64编译器
https://nchc.dl.sourceforge.net/project/mingw-w64/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/5.4.0/threads-posix/seh/x86_64-5.4.0-release-posix-seh-rt_v5-rev0.7z

下载的mingw编译器压缩包,解压到本地文件夹就算是安装好了。

编译OpenBLAS

首先进入 MSYS2 shell
如下在MSYS2的usr\bin文件下执行 bash -l,就进入了

d:\msys64\usr\bin>bash -l

##安装perl
OpenBLAS Makefile脚本中有用到perl,所以在make之前要先安装perl

$ pacman -S --noconfirm perl

这里写图片描述

编译 OpenBLAS

以下是MSYS2中执行编译OpenBLAS的shell脚本

#!/bin/bash
# 将自己的MinGW编译器加入搜索路径
export PATH=/D/tools/mingw64/bin:$PATH ;
# 切换到 OpenBLAS 源码文件夹 
cd "/D/source/OpenBLAS-0.2.18" ; 
# 先执行make clean
echo start make clean,please waiting...;
# 清除之前编译生成的中间文件
mingw32-make clean ;
# 出错就中止编译
if [ ! $? ];then exit -1;fi; 
# -j 选项用于指定多线程编译
# 编译OpenBLAS很耗时,多线程编译才能提高编译速度
# 如果你的MinGW编译器有make.exe,这里mingw32-make也可以替换为make
mingw32-make -j 8 NOFORTRAN=1 \
		BINARY=64 \
		DEBUG=0  \
		DYNAMIC_ARCH=1 
		USE_THREAD=1 \
		NUM_THREADS=24; 
if [ ! $? ];then exit -1;fi;
# 删除安装路径
rm "/D/release/OpenBLAS_windows_gcc540_x86_64" -fr;
#if [ ! $? ];then exit -1;fi;
# 安装到指定的位置 /D/release/OpenBLAS_windows_gcc540_x86_64 
mingw32-make install PREFIX="/D/release/OpenBLAS_windows_gcc540_x86_64" NO_LAPACKE=1 

OpenBLAS编译参数简介

BINARY=64

用于指定编译32位还是64位代码

DYNAMIC_ARCH=1

指定使用动态核心模式(DYNAMIC_ARCH),
DYNAMIC_ARCH是指OpenBLAS 库中同时包含支持多种 cpu 核心架构的代码,
OpenBLAS可以在运行时自动切换到合适的架构代码(编译耗时较长)
如果不指定此参数则会自动检测当前 cpu ,编译出适合当前 cpu 架构的OpenBLAS库(编译时间较短),
在其他不同架构的cpu上运行可能会存在指令集兼容性问题

USE_THREAD=1

指定使用多线程,OpenBLAS默认就是使用多线程模式,所以这个参数可以去掉

NUM_THREADS=24

多线程模式时最大线程数,如果不指定则定义为当前cpu的核心数

关于 OpenBLAS 的参数更详细的说明参见 OpenBLAS 源码文件夹下的 GotoBLAS_02QuickInstall.txt,Makefile.rule,USAGE.md等文件,以及 OpenBLAS官网的说明(https://github.com/xianyi/OpenBLAS)

Visual Studio 中导入OpenBLAS库

根据OpenBLAS官网的说明,MSVC下只能使用OpenBLAS动态库,MinGW则动态库和静态库都可以使用。
MSVC下导入动态库就是将libopenblas.dll.a加入连接库的清单,这里.dll.a等同于动态库导入库(import library).lib

Limitations
Both static and dynamic linking are supported with MinGW. With Visual Studio, however, only dynamic linking is supported and so you should use the import library.
@ https://github.com/xianyi/OpenBLAS/wiki/How-to-use-OpenBLAS-in-Microsoft-Visual-Studio

参考资料
《How to use OpenBLAS in Microsoft Visual Studio》
《MSYS2-installation》

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
要在Windows下使用MSYS2编译FFmpeg,你可以按照以下步骤进行操作: 1. 首先,下载FFmpeg的源代码。你可以在官方网站上找到下载链接。 2. 安装MSYS2 MinGW64。你可以在官方网站上找到安装程序。 3. 在MSYS2 MinGW64的命令行,执行以下命令来配置编译环境和编译FFmpeg: ``` pacman -S mingw-w64-x86_64-toolchain // 安装mingw工具链 pacman -S msys/base-devel // 安装基础工作环境 pacman -S yasm nasm gcc // 安装汇编和编译器 pacman -S mingw64/mingw-w64-x86_64-SDL2 // 安装FFmpeg依赖的SDL2库 ``` 4. 解压下载的FFmpeg源码,并进入解压后的文件夹。使用以下命令进行配置和编译安装: ``` cd /path/to/ffmpeg-source-code // 进入FFmpeg源码文件夹 ./configure --prefix=/usr/local/ffmpeg // 配置安装路径 make // 编译源码(需要一段时间) make install // 安装编译结果 ``` 5. 编译完成后,你就可以在指定的安装路径(默认为/usr/local/ffmpeg)找到生成的相关文件。 请注意,编译过程可能会出现一些错误。如果遇到问题,你可以参考一些博客或文档,或者重新安装MSYS2并重复上述步骤来解决问题。 希望这些步骤对你有帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [windows使用MSYS2编译FFmpeg](https://blog.csdn.net/ice_bear221/article/details/128515239)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10km

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值