ncorr的编译与使用(c++接口+Windows+vs2017)

NCORR DIC: c++ port for Windows using Microsoft Visual Studio C++ 2017.

1.前期准备

  1. 有 Visual Studio 2017
  2. 安装好 CMAKE
  3. 下载 Ncorr的C++接口源码
  4. 下载 OpenCV某个版本源码(这里以3.4.14为例)
  5. 下载 FFTW for Windows DLLs(以64-bit 为例)
  6. 下载 suitesparse-metis-for-windows

2.使用Cmake挨个编译

  • 2.1 编译OpenCV

①打开cmake-gui界面:

  • Where is the source code 设置为opencv源码根目录
  • Where to build the binaries 设置为你想build后输出的目录

ncorr的编译与使用(c++接口+Windows+vs2017)

②点击Configure,设置为 Visual Studio 15 2017 (x64) ,然后点击Finish

ncorr的编译与使用(c++接口+Windows+vs2017)

③等待配置完成后,有一些选项变红让我们确认,直接不用改,再次点击Configure,等待完成后,点击Generate生成,会在你的build目标目录生成一个解决方案(.sln),打开这个sln

ncorr的编译与使用(c++接口+Windows+vs2017)

④设置为Release,生成菜单栏点击,批生成,选择 INSTALL的Release和Debug,生成,等待生成结束,然后在build下找到install文件夹,这里就是OpenCV最终编译好的文件

ncorr的编译与使用(c++接口+Windows+vs2017)

 

2.2 编译fftw3

①将下载好的fftw3压缩文件解压,解压后如图,复制这个目录名。

ncorr的编译与使用(c++接口+Windows+vs2017)

②在开始菜单,找到visual studio 2017项,然后再找到VS2017 X64X86交叉工具命令提示符,右键以管理员权限运行。

ncorr的编译与使用(c++接口+Windows+vs2017)

③以fftw3在我电脑目录为例,首先进入e盘,其次进入“E:\Download\fftw-3.3.5-dll64”,即fftw3目录内,执行以下三条语句:

lib /def:libfftw3-3.def
lib /def:libfftw3f-3.def
lib /def:libfftw3l-3.def

ncorr的编译与使用(c++接口+Windows+vs2017)

④执行完成后退出,找到fftw3目录,编译完成后的目录内多出6个文件,如下

ncorr的编译与使用(c++接口+Windows+vs2017)

 

2.3 编译SuiteSparse

①运行 Cmake GUI

②Where is the source code 设置为suitesparse根目录,Where to build the binaries 设置为你想suitesparse编译后输出的目录

③点击Configure设置为 Visual Studio 15 2017(x64) 然后点Finish

ncorr的编译与使用(c++接口+Windows+vs2017)

然后点击configure,弹出一些红色选项后再次单击configure,直到显示Configuring done后点击 Generate

⑤Generating done完成后,打开\build\SuiteSparseProject.sln,点击批生成,勾选上ALLBUID的Release和Debug,INSTALL的Release和Debug后点击生成

ncorr的编译与使用(c++接口+Windows+vs2017)ncorr的编译与使用(c++接口+Windows+vs2017)

⑥找到build\install文件夹,该文件夹就是suitsparse编译后的文件夹,然后把‪E:\Download\suitesparse-metis-for-windows-master\lapack_windows文件夹复制到build\install文件夹内

 

3.创建包含Ncorr的解决方案

3.1 Copy源码

创建一个新的解决方案,将下载好的Ncorr文件夹解压,找到include文件夹和src文件夹,将里面的源码分别倒入到头文件和源文件中,并新增一个ncorr_test.cpp放置“...\ncorr_2D_cpp-master\test\src\ncorr_test.cpp”

ncorr的编译与使用(c++接口+Windows+vs2017)

3.2 配置附加包含目录和附加库目录

找到第二步编译的3个项目,存到一个文件夹里分别命名方便寻找。

  1. In C/C++ / 附加包含目录 新增
    • $(SolutionDir)..\fftw
    • $(SolutionDir)..\opencv\build\x64\vc15\install\include\
    • $(SolutionDir)..\suitesparse\build\install\include\
  2. In 链接器 / 常规 /附加库目录 新增
    • $(SolutionDir)..\fftw
    • $(SolutionDir)..\opencv\build\x86\vc14\install\x86\vc14\lib
    • $(SolutionDir)..\suitesparse\build\install\lib\
    • $(SolutionDir)..\suitesparse\build\install\lib\lapack_blas_windows\
  3. In 链接器/ 输入/ 附加依赖项 新增如下(以Debug为例,如果是Release就把下面的有后缀d的去掉):
libblas.lib
liblapack.lib
opencv_core3414d.lib
opencv_highgui3414d.lib
opencv_imgcodecs3414d.lib
opencv_imgproc3414d.lib
opencv_videoio3414d.lib
libamdd.lib
libbtfd.lib
libcamdd.lib
libccolamdd.lib
libcolamdd.lib
libcxsparsed.lib
libcholmodd.lib
libklud.lib
libldld.lib
libspqrd.lib
libumfpackd.lib
suitesparseconfigd.lib
metisd.lib
libfftw3-3.lib

3.3修改部分代码错误

①在 Array2D.h文件中

  • On line 38                #include "SuiteSparseQR.hpp"           替换为    #include "suitesparse/SuiteSparseQR.hpp"
  • On line 307               去掉  = PAD::ZEROS
  • On line 3222
typename std::enable_if<std::is_same<typename container_traits<T_container2>::nonconst_container, typename base_region<T_container>::nonconst_container>::value, base_region<T_container>&>::type base_region<T_container>::operator=(const base_region<T_container2> &reg) {

替换为

auto base_region<T_container>::operator=(const base_region<T_container2>& reg) -> typename std::enable_if<std::is_same<typename container_traits<T_container2>::nonconst_container, nonconst_container>::value, base_region&>::type {

②在Array2D.h文件中

把重载报错的全部写到声明处,如:

ncorr的编译与使用(c++接口+Windows+vs2017)

 

可以直接下载我修改好的Array2D.h 文件  文件链接:Array2D.h

 3.4 放置dll

不再赘述,提示缺啥dll就去前面编译的3个文件夹内查找放到解决方案内即可

 

 

 

 


最后:

ncorr的编译与使用(c++接口+Windows+vs2017)

在命令参数填入:caculate,执行即可

上一篇:VS2017读取ini 文件中文乱码


下一篇:vs2013 vs2017和sqlserver localdb环境下解决IIS调试问题