Pulled code from:
Following build instructions, the following command was run in Windows 10 from the VS2017 Native Tools Command Prompt:
C:\Users\M4800\Documents\caffe_bvlc_vs2017p>scripts\build_win.cmd
The build was fully successful with BUILD_MATLAB=0.
When we set BUILD_MATLAB=1 at top of build_win.cmd we get linker errors in the "matlab" project such that caffe_.mexw64 is never built.
I noticed the following in the CMAKE compiler output that something was wrong with the Matlab result:
-- Matlab:
-- Matlab : Yes (, <=== this did not look right!
-- Octave : No
This output was from the folling lines in Summary.cmake
caffe_status("Matlab:")
caffe_status(" Matlab :" HAVE_MATLAB THEN "Yes (${Matlab_mex}, ${Matlab_mexext}" ELSE "No")
caffe_status(" Octave :" Octave_compiler THEN "Yes (${Octave_compiler})" ELSE "No")
The output suggested ${Matlab_mex} and ${Matlab_mexext} were both empty, so I did "printf" debugging of the CMAKE scripts.
Determining that FindMatlabMex.cmake never ran, the following code that initialized the above symbols was copied and pasted into Dependencies.cmake
if(MSVC)
foreach(__ver "9.6" "9.3" "9.1" "7.14" "7.11" "7.10" "7.9" "7.8" "7.7")
get_filename_component(__matlab_root "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MathWorks\\MATLAB\\${__ver};MATLABROOT]" ABSOLUTE)
if(__matlab_root)
break()
endif()
endforeach()
endif()
find_path(Matlab_DIR NAMES bin/mex.bat bin/mexext.bat PATHS ${__matlab_root}
DOC "Matlab directory" NO_DEFAULT_PATH)
find_program(Matlab_mex NAMES mex mex.bat HINTS ${Matlab_DIR} PATH_SUFFIXES bin NO_DEFAULT_PATH)
find_program(Matlab_mexext NAMES mexext mexext.bat HINTS ${Matlab_DIR} PATH_SUFFIXES bin NO_DEFAULT_PATH)
The above resolved the empty symbol problem, confirmed by CMAKE output:
-- Matlab:
-- Matlab : Yes (C:/Program Files/MATLAB/R2019a/bin/mex.bat, C:/Program Files/MATLAB/R2019a/bin/mexext.bat
-- Octave : No
Note this was after editing the CNAKE code to allow for Matlab version 9.6 for R2019a, which I have installed.
Remaining is a linker error:
1>LINK : error LNK2001: unresolved external symbol mexCreateMexFunction
1>LINK : error LNK2001: unresolved external symbol mexDestroyMexFunction
1>LINK : error LNK2001: unresolved external symbol mexFunctionAdapter
1>C:/Users/M4800/Documents/caffe_bvlc_vs2017p/build/matlab/Release/caffe_.lib : fatal error LNK1120: 3 unresolved externals
Opening the project file generated by CMAKE in VS2017:
C:\Users\M4800\Documents\caffe_bvlc_vs2017p\build\Caffe.sln
Below are properties of interest from the "matlab" project in the solution that fails to link.
Configuration Properties --> VC++ Directories --> Library Directories
$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64;$(MatlabDir)\extern\lib\win64\microsoft;
Configuration Properties --> C/C++ --> Additional Include Directores
C:\Users\M4800\Documents\caffe_bvlc_vs2017p\build\include;
C:\Users\M4800\Documents\caffe_bvlc_vs2017p\build;
C:\Program Files\MATLAB\R2019a\extern\include;C:\local\boost_1_65_1;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include;
C:\Users\M4800\Documents\caffe_bvlc_vs2017p\include;
C:\Users\M4800\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\include;
C:\Users\M4800\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\include\opencv;
C:\Users\M4800\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\Include;%(AdditionalIncludeDirectories)
C:\Program Files\MATLAB\R2019a\extern\lib\win64\microsoft\libMatlabEngine.lib;
C:\Program Files\MATLAB\R2019a\extern\lib\win64\microsoft\libMatlabDataArray.lib;
C:\Program Files\MATLAB\R2019a\extern\lib\win64\microsoft\libmex.lib;
C:\Program Files\MATLAB\R2019a\extern\lib\win64\microsoft\libmx.lib;
C:\Program Files\MATLAB\R2019a\extern\lib\win64\microsoft\libmat.lib;
..\lib\Release\caffe.lib;..\lib\Release\caffeproto.lib;
C:\local\boost_1_65_1\lib64-msvc-14.0\boost_system-vc140-mt-1_65_1.lib;
C:\local\boost_1_65_1\lib64-msvc-14.0\boost_thread-vc140-mt-1_65_1.lib;
C:\local\boost_1_65_1\lib64-msvc-14.0\boost_filesystem-vc140-mt-1_65_1.lib;
C:\local\boost_1_65_1\lib64-msvc-14.0\boost_chrono-vc140-mt-1_65_1.lib;
C:\local\boost_1_65_1\lib64-msvc-14.0\boost_date_time-vc140-mt-1_65_1.lib;
C:\local\boost_1_65_1\lib64-msvc-14.0\boost_atomic-vc140-mt-1_65_1.lib;
C:\Users\M4800\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\lib\glog.lib;
C:\Users\M4800\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\Lib\gflags.lib;
shlwapi.lib;
C:\Users\M4800\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\lib\libprotobuf.lib;
C:\Users\M4800\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\lib\caffehdf5_hl.lib;
C:\Users\M4800\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\lib\caffehdf5.lib;
C:\Users\M4800\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\cmake\..\lib\caffezlib.lib;
C:\Users\M4800\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\lib\lmdb.lib;ntdll.lib;
C:\Users\M4800\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\lib\leveldb.lib;
C:\Users\M4800\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\cmake\..\lib\boost_date_time-vc140-mt-1_61.lib;
C:\Users\M4800\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\cmake\..\lib\boost_filesystem-vc140-mt-1_61.lib;
C:\Users\M4800\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\cmake\..\lib\boost_system-vc140-mt-1_61.lib;
C:\Users\M4800\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\lib\snappy_static.lib;
C:\Users\M4800\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\lib\caffezlib.lib;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\cudart.lib;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\curand.lib;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\cublas.lib;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\cublas_device.lib;
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64\cudnn.lib;
C:\Users\M4800\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\x64\vc14\lib\opencv_highgui310.lib;
C:\Users\M4800\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\x64\vc14\lib\opencv_imgcodecs310.lib;
C:\Users\M4800\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\x64\vc14\lib\opencv_imgproc310.lib;
C:\Users\M4800\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\x64\vc14\lib\opencv_core310.lib;
C:\Users\M4800\.caffe\dependencies\libraries_v140_x64_py27_1.1.0\libraries\lib\libopenblas.dll.a;
C:\Users\M4800\Miniconda2\libs\python27.lib;C:\local\boost_1_65_1\lib64-msvc-14.0\boost_python-vc140-mt-1_65_1.lib;
kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;advapi32.lib
Any suggestions that could help resolve the linker errors?