TX2安装CUDA9.0、cudnn7.0、以及opencv3.4

TX2重新刷了机,当时刷的是jetpack3.3.1版本的,由于host笔记本内存不足,当时刷机时只是刷了Ubuntu16.04的系统,其他的软件都没刷,系统刷完后这里可以选择手动安装这些。

1、CUDA9.0

jetpack3.3.1版本应该可以装CUDA8.0或者CUDA9.0,这里考虑到要装openpose所以直接装的是CUDA9.0

1、从官网下载CUDA9.0的安装包,这里我下的版本是cuda-repo-l4t-9-0-local_9.0.252-1_arm64.deb。这里可能需要注册,而且下载速度真的是慢的有点让人头大。如果不想去官网下的这里我存了链接

2、将下载好的安装包放到home下,运行下列命令:

sudo dpkg -i cuda-repo-l4t-9-0-local_9.0.252-1_arm64.deb
sudo apt-get update
sudo apt-get install cuda-toolkit-9-0
sudo gedit /etc/bash.bashrc

#在文件的末尾加入:
export PATH=/usr/local/cuda-9.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:$LD_LIBRARY_PATH

总体来说,CUDA的安装还是没什么问题的,除了当时update的时候有点慢,应该是自带的源的问题。

2、cudnn7.0

cudnn的安装比CUDA步骤多一点,但其实差不多。这里下载的是cuDNN v7.0.3-linux,同样可以在英伟达的官网下载。CSDN的下载链接

下载后,放到home文件夹下,解压,得到一个cuda文件夹,然后运行下列命令:

sudo cp cudnn.h /usr/local/cuda-9.0/include/
sudo cp libcudnn.so /usr/local/cuda-9.0/lib64/
sudo cp libcudnn.so.7 /usr/local/cuda-9.0/lib64/
sudo cp libcudnn.so.7.0.3 /usr/local/cuda-9.0/lib64/
sudo cp libcudnn_static.a /usr/local/cuda-9.0/lib64/

这里其实只是将几个文件从cuda文件夹下拷贝到/usr/local/cuda-9.0中的两个文件夹中去了而已,如果不想执行这些命令的可以试一下直接复制粘贴是否可行,应该没问题。

然后,创建软连接,并删除之前的cudnn版本,命令行如下:

sudo chmod +r libcudnn.so.7.0.3
sudo rm -rf libcudnn.so libcudnn.so.5
sudo ln -s libcudnn.so.7.0.3 libcudnn.so.7
sudo ln -s libcudnn.so.7 libcudnn.so
sudo ldconfig

cd /usr/bin
sudo rm -i libcudnn.so
sudo rm -i libcudnn.so.5
sudo ln -s libcudnn.so.7 libcudnn.so
sudo ln -s libcudnn.so.7.0.3 libcudnn.so.7

这里如果用ln -s报错的话可以用ln -sf。

另外这里在执行

sudo rm -rf libcudnn.so libcudnn.so.5

之后似乎把新添加的libcudnn.so文件删除了,可以用前面的方式重新添加一下。

最后,通过运行

cat /usr/local/cuda-9.0/include/cudnn.h | grep CUDNN_MAJOR -A 2

如果显示有cudnn7.0.3的版本信息,则证明cudnn7.0.3已成功安装。

3、opencv3.4

首先,需要下载opencv和opencv_contrib(后者会在cmake配置的时候用到),这是因为opencv3以后SIFT和SURF之类的属性被移到了contrib中,下载地址:
opencv:https://opencv.org/releases.html
opencv_contrib:https://github.com/opencv/opencv_contrib/tree/3.4.0
下载Opencv3.4.0和OpenCV_contrib模块后,在home目录下解压opencv-3.4.0,并把opencv_contrib-3.4.0解压到opencv-3.4.0目录下。 然后,安装依赖项,终端输入:

sudo apt-get install -y \
    cmake \
    libavcodec-dev \
    libavformat-dev \
    libavutil-dev \
    libeigen3-dev \
    libglew-dev \
    libgtk2.0-dev \
    libgtk-3-dev \
    libjasper-dev \
    libjpeg-dev \
    libpng12-dev \
    libpostproc-dev \
    libswscale-dev \
    libtbb-dev \
    libtiff5-dev \
    libv4l-dev \
    libxvidcore-dev \
    libx264-dev \
    qt5-default \
    zlib1g-dev \
    pkg-config

接着,进入opencv-3.4.0目录并新建build文件夹,终端输入:

cd ~/opencv-3.4.0/
mkdir build

在build文件夹下创建make_opencv.sh文件,文件内容为:

#!/bin/bash
cmake \
    -D CMAKE_BUILD_TYPE=Release \
    -D CMAKE_INSTALL_PREFIX=/usr \
    -D BUILD_PNG=OFF \
    -D BUILD_TIFF=OFF \
    -D BUILD_TBB=OFF \
    -D BUILD_JPEG=OFF \
    -D BUILD_JASPER=OFF \
    -D BUILD_ZLIB=OFF \
    -D BUILD_EXAMPLES=OFF \
    -D BUILD_opencv_java=OFF \
    -D BUILD_opencv_python2=ON \
    -D BUILD_opencv_python3=OFF \
    -D ENABLE_PRECOMPILED_HEADERS=OFF \
    -D WITH_OPENCL=OFF \
    -D WITH_OPENMP=OFF \
    -D WITH_FFMPEG=ON \
    -D WITH_GSTREAMER=ON \
    -D WITH_GSTREAMER_0_10=OFF \
    -D WITH_CUDA=ON \
    -D WITH_GTK=ON \
    -D WITH_VTK=OFF \
    -D WITH_TBB=ON \
    -D WITH_1394=OFF \
    -D WITH_OPENEXR=OFF \
    -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-9.0 \
    -D CUDA_ARCH_BIN=6.2 \
    -D CUDA_ARCH_PTX="" \
    -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.4.0/modules/ \
    ../

注意这里关于

-D BUILD_EXAMPLES=OFF \

这一项这里设置为了OFF,因为当时编译的时候出现了一个最终也未能解决的错误,但是这个错误是由于编译EXAMPLES导致的,所以我把这项关了最后编译通过的。

接下来,更改make_opencv.sh的执行权限,终端输入:

chmod 777 make_opencv.sh

然后,进入build目录,执行make_opencv.sh文件

./make_opencv.sh

配置成功后,执行:

make -j4
sudo make install

最后完成编译

期间遇到的几个问题:

问题1、boostdesc_bgm.i: No such file or directory

这里是由于缺少一系列文件造成的,可以通过手动下载这些文件统一放到opencv_contrib/modules/xfeatures2d/src/路径下即可。CSDN下载链接

问题2、fatal error: opencv2/xfeatures2d/cuda.hpp: No such file or directory

这个问题就比较奇怪了,因为本身这个路径是存在的,文件也是存在的,但是似乎它并没有找到。实际上该文件的路径是在./opencv_contrib-3.4.0/modules/xfeatures2d/include/opencv2/xfeatures2d/下,但是我将保存的文件中该路径改为绝对路径也存在同样的错误,死活找不到。后来我将该文件拷贝到./modules/core/include/opencv2/xfeatures2d/路径下,编译通过。

问题3、CMakeFiles/example_gpu_surf_keypoint _matcher.dir/surf_keypoint_matcher.cpp.o: In function `main’:

完整的报错是这样子的:

CMakeFiles/example_gpu_surf_keypoint_matcher.dir/surf_keypoint_matcher.cpp.o: In function `main':
surf_keypoint_matcher.cpp:(.text.startup.main+0x352): undefined reference to `cv::cuda::SURF_CUDA::SURF_CUDA()'
surf_keypoint_matcher.cpp:(.text.startup.main+0x579): undefined reference to `cv::cuda::SURF_CUDA::operator()(cv::cuda::GpuMat const&, cv::cuda::GpuMat const&, cv::cuda::GpuMat&, cv::cuda::GpuMat&, bool)'
surf_keypoint_matcher.cpp:(.text.startup.main+0x60d): undefined reference to `cv::cuda::SURF_CUDA::operator()(cv::cuda::GpuMat const&, cv::cuda::GpuMat const&, cv::cuda::GpuMat&, cv::cuda::GpuMat&, bool)'
surf_keypoint_matcher.cpp:(.text.startup.main+0x6af): undefined reference to `cv::cuda::SURF_CUDA::defaultNorm() const'
surf_keypoint_matcher.cpp:(.text.startup.main+0x7ca): undefined reference to `cv::cuda::SURF_CUDA::downloadKeypoints(cv::cuda::GpuMat const&, std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> >&)'
surf_keypoint_matcher.cpp:(.text.startup.main+0x7ea): undefined reference to `cv::cuda::SURF_CUDA::downloadKeypoints(cv::cuda::GpuMat const&, std::vector<cv::KeyPoint, std::allocator<cv::KeyPoint> >&)'
surf_keypoint_matcher.cpp:(.text.startup.main+0x800): undefined reference to `cv::cuda::SURF_CUDA::downloadDescriptors(cv::cuda::GpuMat const&, std::vector<float, std::allocator<float> >&)'
surf_keypoint_matcher.cpp:(.text.startup.main+0x812): undefined reference to `cv::cuda::SURF_CUDA::downloadDescriptors(cv::cuda::GpuMat const&, std::vector<float, std::allocator<float> >&)'
collect2: error: ld returned 1 exit status
samples/gpu/CMakeFiles/example_gpu_surf_keypoint_matcher.dir/build.make:132: recipe for target 'bin/example_gpu_surf_keypoint_matcher' failed
make[2]: *** [bin/example_gpu_surf_keypoint_matcher] Error 1

这个问题的解决方式是通过修改以下路径中的文件:

./build/samples/gpu/CMakeFiles/example_gpu_surf_keypoint_matcher.dir/link.txt 

这个文件是刚才编译的时候自动生成的,将该link.txt 中的内容替换成以下内容即可:

--as-needed CMakeFiles/example_gpu_surf_keypoint_matcher.dir/surf_keypoint_matcher.cpp.o ../../modules/xfeatures2d/CMakeFiles/opencv_xfeatures2d.dir/src/surf.cuda.cpp.o ../../modules/xfeatures2d/CMakeFiles/cuda_compile_1.dir/src/cuda/cuda_compile_1_generated_surf.cu.o

不是特别明白,具体的讨论在这里面有:

https://github.com/opencv/opencv/issues/9949

安装过程的参考文档:
1、

https://blog.csdn.net/qq_38595610/article/details/105958131

2、

https://blog.csdn.net/GungnirsPledge/article/details/108597474

3、这里面提供了一种cudnn的安装方式,还没试过

https://blog.csdn.net/qq_30129009/article/details/99059404

4、

https://blog.csdn.net/nannan7777/article/details/103256157
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一叶执念

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值