Windows10安装CurveLab2.1.3和编译安装FFTW2.1.5-吐血整理

前言

最近在研究Curvelet,研究的头都大了,所要学习的内容太多,反反复复学西wavelet,ridgelet、radon transform等等,学到头更大,需要借助编程来进行理解。在使用CurveLab时遇到了编译的问题,大约被困扰了四天左右,将一知半解进行记录分享,方便其他人学西。


用过的环境:
  • Win10+Matlab2015b+VS2013/VS2015/MinGW(失败)
  • Win10+Matlab2020b+VS2013/VS2015/MinGW(失败)
  • Win10+Matlab2016b+VS2013/VS2015/VS2017/MinGW(失败)
  • Win10+Matlab2017b+TDM-GCC (成功)
    结论(猜测):根据多次失败的经验,大胆的猜测问题在于VS自带的编译器,而不是Matlab的版本问题参考的多篇博文也有提到:VS自带编译器存在一些问题,大神可以忽略以上废话,想用什么编译器就用什么编译器,这都是无所谓的。如果小白的话,建议还是把VS的编译环境卸载了吧,问题太多 >_<

    要解决的问题:
  • 错误使用 mex fdct_wrapping_param_mex.cpp
  • fatal error C1083: 无法打开包括文件: “fftw.h”: No such file or directory
  • fdct_wrapping_param_mex.mexw64 : fatal error LNK1120: 1 个无法解析的外部命令
  • fdct_wrapping_param_mex.obj : error LNK2019: 无法解析的外部符号


一、下载链接

整个问题的解决过程基本上会用到一下工具:

二、遇到问题&解决问题

2.1 fatal error C1083: 无法打开包括文件: “fftw.h”: No such file or directory

(1)我们在Matlab命令行窗口输入以下命令mex-setup,可以看到如下图所示。(其实这里我已经单独安装了MinGW-w64,但是为什么编译器里为什么不显示呢?有各种各样的解决办法,大家可以暂时不用理会,到最后我也没有用到自己安装的MinGW-w64)

mex -setup

mex-setup(2)点击“mex -setup C++”
在这里插入图片描述
(3)在命令行窗口输入:

mex fdct_wrapping_param_mex.cpp

报错如下:
在这里插入图片描述
到这儿就是错误开始的第一步,因为CurveLab进行了Matlab和.cpp的混合编程,对于混合编程的我来说,我能想到的解决办法,就是使用Matlab自带的mex编译工具,当在我自己电脑上报错后,我又使用了其他人的电脑进行编译,结果出现了同样的错误,这证明了可能不是我电脑的问题。

问题分析 fatal error C1083: 无法打开包括文件: “fftw.h”: No such file or directory,我的第一反应是,fftw.h头文件缺失,那就把它加进来吧,那么问题来了,fftw.h文件在哪儿呢,在CurveLab2.1.3下是找不到,这个文件是其依赖的ffwt-2.1.5里的文件。于是我把ffwt-2.1.5下载了下来,并且将该文件放了进来。

2.2 fdct_wrapping_param_mex.mexw64 : fatal error LNK1120: 1 个无法解析的外部命令

把fftw.h放入CurveLab再进行编译,就变成了以上的问题。这就很离谱了,离谱的不是这个错误,二是这个将这个错误粘贴到百度搜索,竟然没有匹配的答案,离谱啊!!!
解决办法:在国际版的Bing进行英文检索,可喜可悲有类似的问题,我们来看一下:
在这里插入图片描述
(怎么说呢,真让人头大!English!!!!!,离谱)
参考链接我也放在这里,供大家直接查阅:

我觉得这里面问的问题和回答也是很有意思,我们来看一下:
在这里插入图片描述
如果有道翻译没有翻译错的话,这个人的意思应该是:我再WIndows下编译FFTW遇到了麻烦,然后我去Ubuntu下进行了编译,然后它的问题解决了。(怎么说?Congulations?Unbuntu本来就容易编译成功)。
来,我们看一下官方文档:The C++ implementation is tested on Unix-type platforms, including Linux,
SunOS and MacOS.

三、安装MSYS2、TDM-GCC、MinGW64

3.1安装MinGW-w64

(注:MinGW-w64的安装可看可不看,因为我最后编译成功的确没有用到这个,但是过程中用了太多次,就顺手给写上了。)
(1)下载 - MinGW-w64
(2)点击MingW-W64builds在这里插入图片描述(3)点击SourceForge在这里插入图片描述
(4)下载安装:
在这里插入图片描述
(5)安装选项:
在这里插入图片描述
重点就在这一步,其他的一路Next就好了,不懂的可以搜索更详细的博客,这里做一个简答解释:x86_64代表64位编译,win32代表用Windows编译,seh更新更稳定。

3.2安装MSYS2

(1)下载 - MSYS2
安装过程跟3.1基本上一模一样,别问我为什么这么说,点进去就知道了。
(2)注意需要利用msys2安装上make,在msys2中,输入

pacman -S make

即可自动安装。
(3) MSYS2和MinGW-w64安装完成后需要配置一下环境变量,将MingGW-w64以及msys2的bin目录添加到系统路径,如下图所示:
在这里插入图片描述

3.3安装TDM-GCC

(1)下载: - TDM-GCC
尽量下载比较新的版本。
在这里插入图片描述
(2)直接存储在C盘跟目录下,不要有子目录,路径中不要有空格。
(3)安装完成后,在Matlab命令行:设置变量环境:其中’D:\TDM-GCC-64’为安装TDM-GCC-64的路径,请设置位你自己的安装路径。

setenv(‘MW_MINGW64_LOC’,’D:\TDM-GCC-64)

(4)如果不想每次都设置环境,就直接在系统中添加环境变量即可。变量名:MW_MINGW64_LOC,路径:D:\TDM-GCC-64。
(5)使用过程中可能会报错:“您使用的是不受支持的 MinGW 编译器版本。要安装支持的 MinGW 编译器版本”
在这里插入图片描述
莫慌,不要怕,这是内部printf的输出,无需关注。

至此,需要的不需要的我们都安装上了,nice!!!

3.4使用Bash环境

为什么要使用bash环境呢,因为使用msys2和MinGW-W64进入文件路径,我觉得还是一件很麻烦的事情,非常不方面。那么我们接下来,配置一下,使可以从cmd直接进入bash环境。
(1)我们打开Windos设置,选择更新和安全。
在这里插入图片描述
(2)点击开发者选项:
在这里插入图片描述
(3)将开发人员模式打开:

在这里插入图片描述

四、编译FFTW-2.1.5

(1)下载 - FFTW-2.1.5并解压缩到文件。

避免大家混乱,给大家看一下我的上层路径:
在这里插入图片描述
其中fftw-2.1.5是要进入的路径,fftw2是我新建的,准备install的文件夹。

(2)打开cmd,进入fftw-2.1.5路径(有很多中方式,这里我推荐这种:直接在路径处输入cmd,然后回车进入)
在这里插入图片描述
(3)在cmd窗口键入bash,即可进入bash环境:在这里插入图片描述

(4)设置编译配置,输入:

./configure --prefix=/your/install/path --with-pic

因为这里我要安装到fftw2文件,所以我输入的是:
./configure --prefix=/e/Software/Matlab2020/MyProject/SparseImageadnSignalProcessing/fftw2 --with-pic 你可以根据自己的路径进行设置。

有的电脑可以通过,有的不可以,如果报如下configure:error:
在这里插入图片描述
如果产生此类错误,莫慌!,补充一些信息即可,输入以下指令就可解决:

./configure  --build=x86_64 --prefix=/e/Software/Matlab2020/MyProject/SparseImageadnSignalProcessing/fftw2  --with-pic

(5)在cmd命令行输入:make 进行编译,编译会持续一段时间,时间长短,视电脑性能而定。
(6)在cmd命令行输入:make install开始安装,文件会安装到fftw2,安装后的文件如下图所示:
在这里插入图片描述
其实到现在我也没明白,这个fftw2的意义是什么,通过看后面的makefile.opt文件跟fftw2没有一点关系,同时我还测试了使用fftw-2.1.5和fftw2产生的结果是一样的,这个地方实在是不理解,有懂得可以评论区留言交流一下>_<

五、编译CurveLab2.1.3

(1)cmd进入curveLab2.1.3所在路径。
(2)修改makefile.opt文件
在这里插入图片描述
a).修改FFTW_DIR的值为fftw-2.1.5的绝对路径。
b).修改MTALB_DIR的值为Matlab的安装路径。
c).修改MEX程序的路径。
d).修改mex.h头文件所在的路径。

大家照葫芦画瓢,自行去理解吧,我实在是给不出有效的解释>_<
(3)在cmd中输入make lib,编译静态链接库文件。
(5)在cmd中输入make matlb,编译mex文件。

至此,大功告成,功德无量!!
如果你不想如此蒙混过关,想知其所以然,强烈建议你参考这篇博文: - Makefile教程(绝对经典,所有问题看这一篇足够了)
我是不行了,基本上废了。

六、参考链接

温馨提示:这里对文章进行总结:学海无涯,回头是岸!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值