Adventures in OpenCV Building: OpenCV + Contrib 3.4 build results in neutered Java and Python files and no Matlab bindings
Hello All,
So I have been trying to successfully build OpenCV + Contrib 3.4 for about a week. My setup is as follows:
- CMake 3.10.2 using Visual Studio 15 2017 Win64 (as seen in one of the screenshots above)
- OpenCV 3.4.0 and OpenCV_Contribute 3.4.0 (assumed, latest build from GitHub)
- Matlab 2017b, C++ compiler set as Microsoft Visual C++ 2017, Computer Vision System Toolbox OpenCV Interface installed (v 17.2.1.0)
- Python 3.6.4 64 bit w/ Numpy (ver 1.14.0)
- Windows 10 Pro 64 bit 64 bit Windows 10 Pro 64 bit
I've set the following options, I can configure and generate without errors:
- VTK 8.1.0
- GStreamer 1.12.4 (Regular and Dev installed)
- OpenNI2 (ver 2.2.0, build 33)
- Intel TBB (ver 2018.0 interface 10001)
- Intel IPP (ICV version): 2017.0.3 [2017.0.3] (I have the 2018.0 version, but don't know how to make CMake locate it.)
- Intel MKL 2018.0
- LAPACK(MKL)
- Apache Ant (ver 1.10.2)
I've spent the week building from vanilla and each subsequent extra, one by one. I only have trouble with open_matlab not being built because of errors:
Output:
Failed to compile CamShift: CamShift.cpp
CUSTOMBUILD : error C2065: 'type': undeclared identifier
CUSTOMBUILD : error C2664: 'cv::Mat::Mat(cv::Mat &&)': cannot convert argument 1 from
4> '::size_t' to 'cv::Size'
Errors:
Error C2039 'type': is not a member of 'cv::DataType<Scalar>'
Error C2065 'type': undeclared identifier
Error C2664 'cv::Mat::Mat(cv::Mat &&)': cannot convert argument 1 from
Everything else seems to build fine. I've built the ALL_BUILD project in both Debug and Release configurations and also the INSTALL soon after, also in both Debug and Release configurations.
On top of that, my Java files and Python files don't work:
My Java files: opencv-340.jar = 601kb, opencv_java340.dll = 2.2MB; while the ones from the official Windows pack are 403kb and 44.1MB, respectively.
My python file: cv2.cp36-win_amd64.pyd = 6.4MB, while the unofficial prebuilt Python libraries, opencv-python 3.4.0.12, comes in at 78.7MB.
Testing a small Java program in Eclipse, i get scolded with:
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\OpenCV\build\install\java\x64\opencv_java340.dll: Can't find dependent libraries
at java.base/java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.base/java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.base/java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.base/java.lang.Runtime.loadLibrary0(Unknown Source)
at java.base/java.lang.System.loadLibrary(Unknown Source)
at opencv_helloworld.HelloCV.main(HelloCV.java:10)
And testing the Python library by importing cv2 with the Python interpreter from the command prompt greets me with:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: DLL load failed: The specified module could not be found.
or
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: DLL load failed: %1 ...
could you add the cmake output to your question ?
(it seems , you have been building dynamic opencv libs, so you need to put the folder containing those on the PATH environment variable, so your c++/python/java program can find those at runtime)
if you want to avoid the dll dependancies, you have to build with
cmake -DBUILD_SHARED_LIBS=OFF
Hmm I think I've tried that, I remember seeing that tip in one of the Java tutorials, but maybe I wasn't paying attention.
In any case, I will try again tomorrow as I've trashed everything tonight. But I've built it so many times I can do it by memory now.
I'll post the output tomorrow, thanks.
Here is my CMake Output and my CMake Variables just incase.
In order to for CMake-GUI to find the 2018 version of IPP, follow these instructions.
In a nutshell, create a new entry
IPPROOT
and set it to the IPP folder in your Intel IDE install folder. For example, mine wasC:/Program Files (x86)/IntelSWTools/compilers_and_libraries_2018.1.156/windows/ipp
.So by unchecking
BUILD_SHARED_LIBS
it results in huge 180MB python file, but I still receive the same error as above. Didn't bother testing the Java or the rest.I'm going to work backwards and start full builds removing extras one by one. It has to be an extra that is not building correctly and interfering with everything else.
Ok, so I had to disable the building of
shared libs
andopencv_world
. First, it gave me a usable python file (import cv2 works) but it only gave me a Java JAR file. I enabledshared libs
to create a Java DLL but it was small and useless. However, I disabledshared libs
and rebuilt it, leaving the Java DLL. VS seems to have built into the DLL file even though i hadshared libs
off.I wonder why didn't the Java DLL get built the first time, if both the JAR and DLL are needed and why it got written to when
shared libs
are off.I still need
opencv_world
, will build later.Note: Had to disable VTK, GStreamer, OpenNI2 and Matlab. One of those causes an issue. :(
Ok I built
opencv_world
without errors and VS complained about a missing zlib DLL when I tried to compile the sample C++ program I mentioned earlier; had to find it in the 3rd Party folder and copy the LIBs and DLLs manually to the appropriate folder.Now to build everything all over again and see what extra is causing problems. >:(