工作需求,记录过程。
还是要将工程移植到未联网的测试机的问题。可见前篇工程部署。本来以为轻车熟路,结果同事直接给了个安装高版本cuda……然后opencv也因为用的是cuda10.2编译的不能用了。方法总比困难多。主要用来记录编译opencv并移植,以及编译工程文件时遇到的一些问题。
安装opencv
这一模块非常感谢同事,写了文档给了安装包,但是由于cuda版本不一致的问题,还是有点新的操作。我记录如下。安装opencv-4.6.0的环境有网。
安装环境:
cuda 11.8
cudnn 7.6.4
- 安装ffmpeg和yasm,直接下载源码,步骤都是解压、configure、make和install。针对ffmpeg,踩到一个坑:
/usr/bin/ld:cann't find -lpostproc
解决,在configure中加上enable gpl:
参考
./configure --enable-shared --enable-postproc --enable-gpl
- 离线准备ippicv和v0.1.1.f.zip,分别在对应的cmake文件中,将文件位置修改成对应的存储位置。(ippicv: line 42;v0.1.1f: line 10)
- 编译安装:在cmake中要保证ffmpeg对应项均为yes。这里的坑是我对应的都为no,看了挺多办法,都没解决,然后尝试查询了下,发现是我没安装pkg-config的问题,因此:
sudo apt-get install pkg-config
- 继续make和install,检测安装成功后进行配置即可。这里不详述,因为已经有很多写的较为详细的文章了。
移植opencv
要从联网环境移植到离线环境,我在这里直接将build文件夹中的include和lib打包了,新环境中解压,cmakelists中直接写该文件夹的地址即可。比我想象中的容易。
编译工程问题
- cblas.h文件没有找到的问题。
fatal error: cblas.h: No such file or directory #include <cblas.h>
我这里是有编译好的第三方库,因此直接在报错的脚本上写的是全地址。如果确定电脑上有该文件,写全地址可解决该问题。其他问题类似找不到包或者找不到文件的问题,首先确定无论第三方库还是本地,只要有这个包,就可以在cmakelists中指定并link。
- cmake的问题解决完了就有找不到软连接的问题。一堆包cannot find -l**** 。
参考
sudo find / -name "lib****.so"
cd /path/lib****.so
sudo cp lib****.so /usr/lib
- make后在运行可执行文件时,可能有一些库还是没有(毕竟不是在本地下载的,只能缝缝补补)。因此,从本地机上下载相应的so文件,放在可执行文件目录下即可,然后用ldd指令查询,没有出现not found基本就可以正常使用了。
总结
两天时间完成了之前一周左右的工作,我可真棒!