matlab开发环境,Windows 下开源开发环境的搭建

因项目需要在 Windows 下测试开发的程序, 所以研究了一下如何在 Windows 下搭建基于 gcc 的开源开发环境。

MSYS2 是 Windows 下的一款开源软件构建和发布平台, 址为 。 它提供了和 Linux 系统几乎一样开发接口和环境, 而且它自带了一个软件包的管理工具 pacman, 可以像 Ubutnu 中 apt 一样管理需要的开源软件包。

MSYS2 可以在其官 下载, 有 32 位和 64位版本的。 因为现在大部分机器和系统都是 64 位的, 所以下面只介绍 64 位版本安装情况。

下载 msys2-x86_64-latest.exe 运行安装, 默认安装在 C:msys64。

安装之后在目录 C:msys64 下, 点击运行 mingw64命令行窗口(注意这里我们不用msys2命令行, 因为我们下面只用到 64 位的程序)。 用下面命令更新 pacman 的服务器列表文件, 这样后面更新系统和安装软件包会快一点:

$ echo “Server =

Server = http://mirror.bit.edu.cn/msys2/REPOS/MINGW/i686/

Server = http://jaist.dl.sourceforge.net/project/msys2/REPOS/MINGW/i686/

Server = http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/m/ms/msys2/REPOS/MINGW/i686/

Server = ftp://148.251.42.38/MINGW/i686/

Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/i686/

” >> /etc/pacman.d/mirrorlist.mingw32 # 附加到文件尾部

$ echo ” Server = http://mirrors.ustc.edu.cn/msys2/REPOS/MINGW/x86_64/

Server = http://mirror.bit.edu.cn/msys2/REPOS/MINGW/x86_64/

Server = http://jaist.dl.sourceforge.net/project/msys2/REPOS/MINGW/x86_64/

Server = http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/m/ms/msys2/REPOS/MINGW/x86_64/

Server = ftp://148.251.42.38/MINGW/x86_64/

Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/x86_64/

” >> /etc/pacman.d/mirrorlist.mingw64

$ echo “Server = http://mirror.bit.edu.cn/msys2/REPOS/MSYS2/$arch/

Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch/

Server = http://jaist.dl.sourceforge.net/project/msys2/REPOS/MSYS2/$arch

Server = http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/m/ms/msys2/REPOS/MSYS2/$arch

Server = ftp://148.251.42.38/MSYS2/$arch

Server = http://downloads.sourceforge.net/project/msys2/REPOS/MSYS2/$arch

” >> /etc/pacman.d/mirrorlist.msys接着用下面的命令把系统更新到最新。

$ pacman -Suu第一次更新完, 可能需要关闭命令行。

下面在 mingw64 命令行中安装需要的编译器和开发工具, 注意这里只安装 64 位的版本:

$ pacman -S base-devel # 基础工具

$ pacman -S mingw-w64-x86_64-toolchain # 编译器gcc, g++, gfortran

$ pacman -S git  # git 版本控制软件

$ pacman -S mercurial  # 另一个版本控制

$ pacman -S make  # make 程序

$ pacman -S mingw-w64-x86_64-cmake # CMake安装完成之后, 基本的开发环境就搭建好了。

MSYS2 还有很多已经编译好的开源软件包, 可以通过 pacman 从 上的仓库中搜索、下载和安装。 比如要安装 boost

$ pacman -Ss boost # 搜索 boost

mingw32/mingw-w64-i686-boost 1.60.0-2

Free peer-reviewed portable C++ source libraries (mingw-w64)

mingw64/mingw-w64-x86_64-boost 1.60.0-2

Free peer-reviewed portable C++ source libraries (mingw-w64)

$ pacman -S mingw-w64-x86_64-boost # 安装 64位 boostWindows 下 Mumps 的安装有了上面的环境, 下面将介绍如何利用 mingw64 来编译安装并行直接解法器 MUMPS。

首先, 安装依赖软件包 metis 和 openblas

$ pacman -S mingw-w64-x86_64-metis

$ pacman -S mingw-w64-x86_64-openblas下面安装 MUMPS, 但它的安装包需要到官 ()填个表, 开发人员会把包发到你的邮箱。

$ tar -xvf MUMPS_5.1.2.tar.gz

$ cd MUMPS_5.1.2/

$ cp Make.inc/Makefile.inc.generic.SEQ  ./Makefile.inc下面要对 Makefile.inc 针对 Windows 系统做一些修改, 主要就是告诉 make 命令, MUMPS 依赖包的头文件和库文件在 Windows 系统的什么地方, 具体内容如下:

# Makefile.inc

LPORDDIR = $(topdir)/PORD/lib/

IPORD    = -I$(topdir)/PORD/include/

LPORD    = -L$(LPORDDIR) -lpord

LMETISDIR = /C/msys64/mingw64/lib

IMETIS    = -I/C/msys64/mingw64/include

LMETIS    = -L$(LMETISDIR) -lmetis

ORDERINGSF  = -Dmetis -Dpord

ORDERINGSC  = $(ORDERINGSF)

PLAT    =

LIBEXT  = .a

OUTC    = -o

OUTF    = -o

RM      = /bin/rm -f

CC      = gcc

FC      = gfortran

FL      = gfortran

AR      = ar vr

RANLIB  = ranlib

INCSEQ  = -I$(topdir)/libseq

LIBSEQ  = $(LAPACK) -L$(topdir)/libseq -lmpiseq

LIBBLAS = -lopenblas

LIBOTHERS = -lpthread

CDEFS = -DAdd_

OPTF    = -O -fPIC

OPTC    = -O -fPIC

OPTL    = -O -fPIC

INCS = $(INCSEQ)

LIBS = $(LIBSEQ)

LIBSEQNEEDED = libseqneeded另外, 在 MUMPS_5.1.2/example 下的 Makefile 中, 也要做些修改, 即在每个例子编译命令后面加下 $(LMETIS) $(LPORD) 两个选项, 如下面 ssimpletest 例子:

ssimpletest:  $(LIBSMUMPS)  $$@.o

$(FL) -o $@ $(OPTL) ssimpletest.o  $(LIBSMUMPS) $(LORDERINGS) $(LMETIS) $(LPORD) $(LIBS) $(LIBBLAS) $(LIBOTHERS)打开 mingw64 的命令行程序, 进入 MUMPS 的源代码目录, make 即可编译 MUMPS。

首先, 在 Matlab 命令行中设置环境变量,

>> setenv(‘MW_MINGW64_LOC’,’C:msys64mingw64′)或者直接在 Windows 系统中添加系统环境变量 MW_MINGW64_LOC, 其值设为 C:msys64mingw64, 如何添加系统环境变量请自行 络搜索 络。

在 Matlab 命令行中运行:

>> mex -setup就可以让 Matlab 的 mex 命令识别到 mingw64, 然后就可以用 mingw64 提供的编译器来编译 mex 程序, 并被 Matlab 的程序调用。

但实际上要编译出在 Matlab 中可以直接调用的 mex 程序, 不用 mex 命令, 甚至不用打开 Matlab, 也是可以的。 因为 mex 生成的可执行文件本质是上动态联接库文件, 而且 Matlab 为 Matlab 与 CC++ 的混合编程提供了相应的函数库, 如:

直接把 MUMPS_5.1.2/MATLAB/ 中 Makefile 文件直接替换为下面的内容:

# MUMPS_5.1.2/MATLAB 下的 Makefile 文件

MATLABROOT  = /C/MATLAB/R2016b

MUMPSROOT   = /C/msys64/home/why/software/MUMPS_5.1.2

MINGWROOT   = /C/msys64/mingw64

MUMPSLIBS   = -L${MUMPSROOT}/lib -ldmumps -lmumps_common -lpord -L${MUMPSROOT}/libseq -lmpiseq

LIBS        = -L${MINGWROOT}/usr/lib -lmetis -lopenblas -lgfortran                                  # 注意

MEXLIBS     = -L${MATLABROOT}/extern/lib/win64/microsoft -llibmex -llibeng -llibmat -llibmx -llibut # 这两行中引用软件包名字的区别

CC          = gcc

CCFLAGS     = -I${MATLABROOT}/extern/include -I${MUMPSROOT}/include -I${MUMPSROOT}/libseq

.PHONY: all

all: dmumpsmex.mexw64

dmumpsmex.mexw64: mumpsmex.c

@${CC} ${CCFLAGS} -shared -fPIC -DMUMPS_ARITH=MUMPS_ARITH_d -O2 -o $@ $< ${MUMPSLIBS} ${LIBS} ${MEXLIBS}

@strip $@

clean:

@-rm -f *.o *.mexw64注意, 上面 MEXLIBS 变量中索引 Matlab 的库文件时, 用的是 -llibmex -llibeng -llibmat -llibmx -llibut, 而 MUMPSLIBS 和 LIBS 变量中用的是 Linux 下常用的索引库的方式, 如 -lmetis, 其中没有 lib字符串。 我猜 mingw64 用了两种完全不同的方式来处理 mingw64 中软件包和 Windows 系统中的软件包。

最后在 MUMPS_5.1.2/MATLAB/ 下 make, 即可编译出一个dmumpsmex.mexw64文件。 最后打开 Matlab 的命令行, 进入MUMPS_5.1.2/MATLAB/目录, 运行下面例子测试编译是否成功。

>> simple_example写在最后上面用到的脚本都放在我的 github: -scripts 仓库中, 包括 MUMPS 的源文件, 你可以下载下来, 直接用里面的脚本来安装 msys2 和 MUMPS 。 里面以后也会放更多计算数学常用软件包的安装脚本, 敬请期待。

在使用操作系统和各种软件的过程中,我们会积累很多操作性的经验和知识, 但这些经验和知识如果不及时总结,变成文字性的东西,是很容易忘记的。下次再遇到类似的情况, 又要把解决问题的过程走一遍, 这是很低效的做事方式。

最好的方式是及时做好笔记, 并把这些操作性的经验和知识程序化, 变成可执行的程序。 下次再做类似的事情, 就只需要运行程序就可以了, 这样可以大大节省自己的时间。 写笔记和编写程序, 可能需要花点时间, 但这份时间花的非常值得, 因为这份永远失去的时间是可以被复制无穷多份的。

相关资源:桌面开满999朵玫瑰花软件绿色版.rar-其它代码类资源-CSDN文库

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年2月13日
下一篇 2021年2月13日

相关推荐