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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM