/
和 \
的区别,不确定的时候就google一下。
在MATLAB中使用,需要安装MATLAB支持的C/C++编译器,参考Matlab关于MinGW的官方说明,mex不一定要选择MinGW但是BayesOpt文档中使用了MinGW。
最终安装的是Mingw-W64。
安装完插件后,需要用mex -setup
,mex -setup C++
选择相应的编译器。
(这里不需要这一步)如果要安装编译环境,只需要安装MSYS2,然后在MSYS2中安装好mingw64就好。不需要独立安装mingw64,cygwin等环境。 MSYS2之于C/C++可以近似类比于Anaconda之于python。
谷歌找到MATLAB mex安装的mingw64的路径,当前R2020a是:
C:/ProgramData/MATLAB/SupportPackages/R2020a/3P.instrset/mingw_w64.instrset/bin/ C:\ProgramData\MATLAB\SupportPackages\R2020a\3P.instrset\mingw_w64.instrset\bin\ (windows格式)
上述地址要添加到环境变量中。 因为后面CMake需要能看到mingw32-make才可以。
不需要独立编译,BayesOpt会自动编译,只需要从官方地址下载,然后解压到一个位置即可,比如我放在了:
C:/Tools/boost/boost_1_75_0 C:\Tools\boost\boost_1_75_0 (windows格式)
Boost是C++的peer-reviewed portable C++ source libraries。似乎是很多项目的必备。
进行下一步前,检查一下系统环境变量中的设置,这里只考虑最简单的情况。
在系统Path
变量中
bin
文件夹的路径,这个路径应该只出现在这里。这步保证mingw32-make.exe
可以被CMD找到。nlopt
被解析到Matlab自带的某个nlopt。从官方地址下载,正常用默认安装即可。
CMake可以理解成,根据一系列的cmake配置,来生成makefile。最终的makefile文件被编译器的make函数调用(对于上述安装的编译器,是调用mingw32-make.exe,只是mingw32起的不同的名称而已)。
如果上述操作弄乱了,直接清空目标文件夹(即图1中where to build the binaries的文件夹),然后就可以重新操作了。 更高级的操作直接各种google cmake的用法。
在CMD下定位到cmake的输出文件夹,然后运行编译:
mingw32-make
等编译完即可。
这里有可能NLOPT报错,检查一下cmake中的NLOPT参数是否被解析到了其它路径,应该是用默认的NLOPT-NOTFOUND
,然后BayesOpt会编译自带的nlopt2。
把上一步编译好的bayesopt-test/lib/*.a
文件,全部复制到bayesopt-master\lib\Release\
文件夹下,这里需要新建lib
和lib\Release
文件夹。
(因为在BayesOpt提供的matlab interface编译代码中指定了在Release
文件夹下找编译好的libs,所以只要两边改得对应了就可以。)
设置Matlab中的编译器
mex -setup
到此结束,应该已经编译完成。
运行demo_*.mat
可以测试运行结果。
MinGW-w64安装教程——著名C/C++编译器GCC的Windows版本,http://rmcantin.github.io/bayesopt/html/install.html#cinwin
cygwin和mingw选哪个? - ttbachyinsda的回答 - 知乎 https://www.zhihu.com/question/283946185/answer/440495136
关于MinGW和Cygwin的一些个人总结和推测 ,https://xnerv.wang/mingw-cygwin-summary-and-thinking/
MinGW/cygwin 快速开始,https://www.codenong.com/cs100750900/
cygwin和mingw的区别,https://developer.aliyun.com/article/69974
添加了 cmake
, mingw64
, Boost
到系统环境变量。
选择 MINGW MAKEFILE
作为 generator。
需要手动设置 boost 的地址。只需要提供 source file 的地址即可,不需要编译后安装。
然后在运行Cmake GUI的目录下,在cmd中运行 mingw32-make 就可以了。
以上失败了。 因为matlab只支持自己版本的mingw。
把上述所有mingw64的地址换成matlab自己的官方compiler,然后重新进行。
在matlab中执行 mex -setup
的过程中,会看到安装的编译器的地址,这里是
C:/ProgramData/MATLAB/SupportPackages/R2020a/3P.instrset/mingw_w64.instrset/bin/
只要勾选了 BAYESOPT_BUILD_EXAMPLES
就会编译过程中失败,报错似乎跟某个地方的文件操作有关,猜测是 exmaple 中调用了在windows下不支持的函数。
Windows搭建类UNIX环境: Msys2+MinGW,https://www.dazhuanlan.com/2019/12/20/5dfc4b8899600/
似乎C++11对std::string之类的东西进行了修改,导致gcc在link的时候会出问题,很多相关的讨论。 比如
但是我似乎没有碰到这个问题