雖然目前還在用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版本均可正常編譯。這里面彎彎繞比較多,就不費神再糾結這個問題了