NVIDIA TX2 下用 g++ 编译 cuda 版 OpenCV 程度的坑

首先要在 TX2 下安装好 cuda 版的 OpenCV。

然后用 g++ 编译用 OpenCV 写的 C++ 程序,会报一大堆错。下面说一下如何解决:


(一)  会有一堆 “/home/usrname/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp:error: ‘NppiGraphcutState’……”。

这得去修改上述位置下的 graphcut.cpp,将

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) 
这句改为:

#if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)
在  编译cuda版OpenCV 这篇里还提到了另外两个错误,不过我好像并没有碰到。


(二)然后依然会有一大堆

 “cv::imread(std::__cxx11::basic_string,std::char_traits,std::allocator > const&, int)’未定义”的error——哇靠连 imread 都没有!

解决方法为:在用 g++ 编译时加上 `pkg-config opencv --cflags --libs opencv` ,即:

g++ main.cpp -o main‘pkg-config opencv --cflags --libs opencv’
也有些博客写的是:

g++ main.cpp -o main‘pkg-config --cflags --libs opencv’
或者

g++ main.cpp‘pkg-config opencv --cflags --libs opencv’ -o main


(三)有时还可能会显示找不到 “-lopencv_cudev”,但是 /usr/lib 下明明已经有相应的 .so 文件了,即使重新链接到 /usr/local/lib 下对应的 .so 文件也没用。可能是由于这篇  移植心酸路 所说的原因。

不过这个错误有时候又会消失,能编译通过。。。。

最后我只是加了一句 -L/usr/local/lib 就解决了:

g++ main.cpp -o main‘pkg-config opencv --cflags --libs opencv’ -L/usr/local/lib
注意:pkg-config 前面的点,是ESC下面的那个键,而不是单引号!


(四)然而直接在终端输入上面这句命令,有时有效,有时无效。把它写到 .sh 里,用 ./ 执行也是有时有效,有时无效。。。。写到 .sh 里用 bash 执行则每次都能成功,搞不懂。


你可能感兴趣的:(笔记)