Windows 从头搭建c++ Eigen 库
虽然目前还在用python实现自己的算法,但是还是有点略微不满足,算法迟早有一天全从python搬到c++上,先给自己立个flag。
前言
由于本人做一些模型的搭建和计算,矩阵运算必然是少不了的,本人在网上查了大量资料,各位大佬都说Eigen库比较好使,好吧,那就用它了。之前在Linux上安装了Eigen库。Linux上安装Eigen库就很简单,按人家给的说明文档操作就可以。但是windows上就比较繁琐了。我又不想用网上教程上的visual studio的那种操作方法去搞一遍,没办法,就按部就班一步一步搭建环境吧。
安装cmake工具
首先去官网cmake官网下载需要版本的安装包,在下载页面有cmake的source包或者二进制文件,个人建议还是下载傻瓜式的安装文件.msi
版本,下载后直接安装就可以了。
打开命令行,输入cmake
,会显示如下输出:
C:\Users\XXXXX>cmake
Usage
cmake [options] <path-to-source>
cmake [options] <path-to-existing-build>
cmake [options] -S <path-to-source> -B <path-to-build>
Specify a source directory to (re-)generate a build system for it in the
current working directory. Specify an existing build directory to
re-generate its build system.
Run 'cmake --help' for more information.
就说明已经安装好了,如果没有输出的话,需要把cmake安装目录下的bin
文件夹添加到系统环境目录。
MinGW-w64安装
先去MinGW下载页下载MinGW-w64安装文件,千万别直接用官网的在线安装器,这玩意直接让你哭。根据个人需要下载好所需要的编译器之后,将其解压到你想要安装的位置,就算是安装完成了。然后将解压目录下的bin
文件夹添加到环境目录,打开命令行输入gcc -v
,就可得到如下信息,说明已经将编译器安装好了。
C:\Users\XXXXX>gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=C:/Program\ Files/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/8.1.0/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../../../src/gcc-8.1.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64 --enable-shared --enable-static --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/mingw810/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-posix-seh-rev0, Built by MinGW-W64 project' --with-bugurl=https://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -fno-ident -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' CPPFLAGS=' -I/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/include -I/c/mingw810/prerequisites/x86_64-zlib-static/include -I/c/mingw810/prerequisites/x86_64-w64-mingw32-static/include' LDFLAGS='-pipe -fno-ident -L/c/mingw810/x86_64-810-posix-seh-rt_v6-rev0/mingw64/opt/lib -L/c/mingw810/prerequisites/x86_64-zlib-static/lib -L/c/mingw810/prerequisites/x86_64-w64-mingw32-static/lib '
Thread model: posix
gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)
到这里基本上把环境已经配置明白了。可以打开clion可以配置自己的工具链了。
将工具集的目录指定到MinGW-w64安装路径下的x86_64-8.1.0-release-posix-seh-rt_v6-rev0\mingw64
文件夹,不是bin
文件夹,这样CLion会自动识别出编译器的版本信息。在cmake一栏里面,将目录指定到cmake安装目录下的bin\cmake.exe
,基本上算是大功告成了,下面的GDB目前还没整明白,暂时不用管他。
Eigen编译安装
使用cmakeGUI工具对eigen的source文件进行编译,编译完成后在编译文件夹直接使用命令 mingw32-make install
即可安装。这里需要说明的是由于默认的安装地址在c盘,应该使用管理员模式的命令行。安装成功会显示
·
·
·
·
······
-- Up-to-date: C:/Program Files (x86)/Eigen3/include/eigen3/unsupported/Eigen/CXX11/src/util/CXX11Workarounds.h
-- Up-to-date: C:/Program Files (x86)/Eigen3/include/eigen3/unsupported/Eigen/CXX11/src/util/EmulateArray.h
-- Up-to-date: C:/Program Files (x86)/Eigen3/include/eigen3/unsupported/Eigen/CXX11/src/util/MaxSizeVector.h
Eigen的使用
在项目的cmakelist
里面添加
include_directories("C:/Program Files (x86)/Eigen3/include/eigen3")
即可调用。
由于环境变量的不同,Linux系统使用语句
find_package(Eigen3 REQUIRED)
include_directories(${EIGEN3_INCLUDE_DIRS})
注:
本人使用8.2版本的mingw并没有编译成功。但是使用clion自带的9.0版本或者qt安装的10.0版本均可正常编译。这里面弯弯绕比较多,就不费神再纠结这个问题了