red-lesion-detection编译matconvnet问题记录

1. 运行dr_setup.m

错误使用 vl_compilenn>check_clpath (第 577 行)
Unable to find cl.exe

出错 vl_compilenn (第 400 行)
check_clpath(); % check whether cl.exe in path

出错 dr_setup (第 78 行)
vl_compilenn('EnableGpu',false);

解决办法:

572行替换为

cl_path = fullfile(cc.Location, 'VC', 'Tools', 'MSVC','14.27.29110','bin','Hostx64','x64');

2. 编译cuda不存在

>> vl_compilenn('enableGpu',true)
错误使用 vl_compilenn>search_cuda_devkit (第 636 行)
Could not find a valid NVCC executable\n

出错 vl_compilenn (第 256 行)
if isempty(opts.cudaRoot), opts.cudaRoot = search_cuda_devkit(opts) ; end

解决办法:

第608行

for v = {'5.5', '6.0', '6.5', '7.0', '7.5'}

加上自己cuda版本号可后续执行

for v = {'5.5', '6.0', '6.5', '7.0', '7.5', '10.2'}

3.nvcc_compile(opts, srcs{i}, objfile, flags.nvcc) ;

错误使用 vl_compilenn>nvcc_compile (第 521 行)
Command "C:\Program Files\NVIDIA GPU Computing
Toolkit\CUDA\v10.2\bin\nvcc" -c
"F:\Projects\Microaneurysm\red-lesion-detection-master\external\matconvnet-master\matlab\src\bits\datamex.cu"
-DNDEBUG -DENABLE_GPU -DENABLE_DOUBLE -D__SSSE3__
-gencode=arch=compute_50,code=\"sm_50,compute_50\"
-I"C:\Applications\MATLAB R2020b\extern\include"
-I"C:\Applications\MATLAB R2020b\toolbox\distcomp\gpu\extern\include"
-gencode=arch=compute_50,code=\"sm_50,compute_50\" -Xcompiler /MD -o
"F:\Projects\Microaneurysm\red-lesion-detection-master\external\matconvnet-master\matlab\mex\.build\bits\datamex.obj"
failed.

出错 vl_compilenn (第 466 行)
nvcc_compile(opts, srcs{i}, objfile, flags.nvcc) ;

4. 安装distcomp后出现下面错误

错误使用 vl_compilenn>nvcc_compile (第 521 行)
Command "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2\bin\nvcc" -c
"F:\Projects\Microaneurysm\red-lesion-detection-master\external\matconvnet-master\matlab\src\bits\impl\bilinearsampler_gpu.cu" -g -DENABLE_GPU -DENABLE_DOUBLE -D__SSSE3__
-gencode=arch=compute_50,code=\"sm_50,compute_50\" -I"C:\Applications\MATLAB R2020b\extern\include" -I"C:\Applications\MATLAB R2020b\toolbox\distcomp\gpu\extern\include"
-gencode=arch=compute_50,code=\"sm_50,compute_50\" -O0 -Xcompiler /MD -o
"F:\Projects\Microaneurysm\red-lesion-detection-master\external\matconvnet-master\matlab\mex\.build\bits\impl\bilinearsampler_gpu.obj" failed.

出错 vl_compilenn (第 466 行)
nvcc_compile(opts, srcs{i}, objfile, flags.nvcc) ;

5. 1.25版本后没有出现3、4错误,1,2,错误后紧接着出现5这个错误如下

错误使用 vl_compilenn>nvcc_compile (第 615 行)
Command "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin\nvcc" -c -o "C:\Applications\MATLAB
R2020b\toolbox\matconvnet-1.0-beta25\matlab\mex\.build\bits\data.obj" "C:\Applications\MATLAB R2020b\toolbox\matconvnet-1.0-beta25\matlab\src\bits\data.cu"
-DENABLE_GPU -DENABLE_DOUBLE -O -DNDEBUG -D_FORCE_INLINES --std=c++11 -I"C:\Applications\MATLAB R2020b\extern\include" -I"C:\Applications\MATLAB
R2020b\toolbox\distcomp\gpu\extern\include" -gencode=arch=compute_50,code=\"sm_50,compute_50\" --compiler-options=/MD --compiler-bindir="C:\Program Files
(x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\bin\Hostx64" failed.

出错 vl_compilenn (第 487 行)
nvcc_compile(opts, srcs{i}, objfile, flags) ;

解决办法:https://blog.csdn.net/CsdnWujinming/article/details/89221565

说修改debug为:true

6. 按照5中描述修改,报错如下

错误使用 mex
'C:\Applications\MATLAB R2020b\toolbox\matconvnet-1.0-beta25\matlab\mex\vl_nnconv.mexw64' 使用了 '-R2018a' 进行编译并与 '-R2017b' 链接在一起。 有关详细信息,请参阅 MEX 文件
使用了一个 API 进行编译并与另一个 API 链接在一起。

出错 vl_compilenn>mex_link (第 627 行)
mex(args{:}) ;

出错 vl_compilenn (第 500 行)
mex_link(opts, objs, flags.mex_dir, flags) ;

解决办法:在619行增添

flags.mexlink(1)=[]; % 源文件没有此行,连接错误通过提示将里面的第一个参数删去,可成功链接

之前成功过一次

使用matconvnet-1.0-beta25编译成功

关闭MATLAB后重新打开运行程序\matlab\mex\vl_nnconv.mexw64' 无效: 找不到指定的 模块。

尝试使用cudnn=true进行重新编译

6. nvcc fatal : '-DNDEBUG': expected a number

将此参数去掉,flags.base(6) = []

得到如下错误

错误使用 vl_compilenn>nvcc_compile (第 616 行)
Command "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin\nvcc" -c -o "C:\Applications\MATLAB
R2020b\toolbox\matconvnet-1.0-beta25\matlab\mex\.build\bits\data.obj" "C:\Applications\MATLAB
R2020b\toolbox\matconvnet-1.0-beta25\matlab\src\bits\data.cu" -DENABLE_GPU -DENABLE_DOUBLE -DENABLE_CUDNN
-I"local\cudnn\include" -O -D_FORCE_INLINES --std=c++11 -I"C:\Applications\MATLAB R2020b\extern\include"
-I"C:\Applications\MATLAB R2020b\toolbox\distcomp\gpu\extern\include"
-gencode=arch=compute_50,code=\"sm_50,compute_50\" --compiler-options=/MD --compiler-bindir="C:\Program Files
(x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\bin\Hostx64" failed.

出错 vl_compilenn (第 487 行)
nvcc_compile(opts, srcs{i}, objfile, flags) ;

后来继续出现错误

后直接将将flags.base,去掉进行编译

613行由strjoin(horzcat(flags.base,flags.nvcc))); 变成strjoin(horzcat(flags.nvcc)));出现新的错误

错误使用 vl_compilenn>nvcc_compile (第 616 行)
Command "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin\nvcc" -c -o "C:\Applications\MATLAB
R2020b\toolbox\matconvnet-1.0-beta25\matlab\mex\.build\bits\impl\im2row_gpu.obj" "C:\Applications\MATLAB
R2020b\toolbox\matconvnet-1.0-beta25\matlab\src\bits\impl\im2row_gpu.cu" -D_FORCE_INLINES --std=c++11 -I"C:\Applications\MATLAB
R2020b\extern\include" -I"C:\Applications\MATLAB R2020b\toolbox\distcomp\gpu\extern\include" -gencode=arch=compute_50,code=\"sm_50,compute_50\"
--compiler-options=/MD --compiler-bindir="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\bin\Hostx64"
failed.

出错 vl_compilenn (第 487 行)
nvcc_compile(opts, srcs{i}, objfile, flags) ;

猜测上述参数在某些编译情况是必要的