OpenCV、mxnet编译与集成的各种坑

Undefined reference to _IplImage::_IplImage()

现象描述:某项目以OpenCV 3.4.4为其第三方依赖,在link的过程中报了这个错误。
原因:这个方法在OpenCV 3.4.4里面已经去掉了,根本就没有这个方法。
发现方式:nm -C libopencv_core.so | grep _IplImage,发现并没有这个方法,顺带一提,官方文档3.4.4上面是有这个方法的,如果不nm一下库还真发现不了
解决方法:编译一个OpenCV 3.2.0即可解决
这样又会遇到问题:如果打开OpenCV的cuda编译选项,会发现3.2.0根本不能在cuda 10.0 + T4上面编译,为使其正常编译,需要用以下命令:

cmake -DWITH_IPP=OFF -DWITH_CUDA=ON -DWITH_CUBLAS=ON -DWITH_CUFFT=ON -DWITH_CUDNN=ON -DCUDA_FAST_MATH=ON -DCMAKE_BUILD_TYPE=Release -DWITH_NVCUVID=OFF -DOPENCV_EXTRA_MODULES_PATH=path/to/opencv_contrib/modules/ -DINSTALL_C_EXAMPLES=OFF -DBUILD_EXAMPLES=OFF -DCUDA_NVCC_FLAGS=--expt-relaxed-constexpr -DCUDA_ARCH_NAME=Manual -DCUDA_ARCH_BIN="50 52 60 61 75" ..

另外,以下几篇blog可作为参考:
https://blog.csdn.net/u014613745/article/details/78310916
https://stackoverflow.com/questions/48383846/nvcc-fatal-unsupported-gpu-architecture-compute-20-while-cuda-9-1caffeopen
https://arnon.dk/matching-sm-architectures-arch-and-gencode-for-various-nvidia-cards/
备注:
如果确定OpenCV是用的3.2.0或以下,还是报这个错误,需要查看libopencv_core.so和你自己的库的引用顺序。

你可能感兴趣的:(OpenCV、mxnet编译与集成的各种坑)