Linux下编译安装OpenCV(基于C++,生成so库供python调用)
下载针对linux平台的源码包,这里下载3.1.0的:
它使用cmake来产生makefile文件的,我们先建立一个Build文件,用来存放编译后文件:
执行cmake, 注意,cmake版本需要大于2.8.7才行(这里在Centos7上编译)
出现几个错误:
前面两个安装依赖包即可:
后面提示下载ippicv失败,估计忘了问题,这里找到缺少的软件然后下载它并存放到这个目录中:
使用下载的覆盖它然后重新cmake:
可以:
接下来执行"make",囧~好像有点慢,等了12分钟……:
接着执行"sudo make install":
安装成功,相关路径也打印出来了,想用python测试下,发现找不到"cv2.so",这是之前的python没有安装numpy,所以编译opencv时没有包含进来,使用pip下载numpy后重新编译安装一次opencv即可。但是安装numpy时老是断线,这些源在国外,增加配置文件,修改为国内源即可:
更新pip源(这里使用清华的),增加如下conf配置文件:
更新后,速度杠杠的~
然后重新安装opencv:
额………………但是发现还是没找到cv2.so或libcv2.so,先不用python咯,后面再看看有什么办法,或者有谁可以告诉我一下呢?用C++测试吧:
运行,OK:
现在生成动态so库,供python调用:
python测试:
当然,这里的cpp应写成类,这样调用main函数不规范,改写成如下:
增加py测试文件:
运行后包如下错误:
objdump来看下test.so的导出符号表:
找不到"print_cv_version",python只能调用C函数,因此,增加"extern "C""编译说明来让C连接器识别,改写test.cpp类如下:
生成so文件后再看看导出函数:
有了,再运行看看: