ubuntu16.04&&OpenCV3.4.1安装(https://blog.youkuaiyun.com/cocoaqin/article/details/78163171 参考这位大侠 cocoaqin 的教程),在安装过程中,遇到
Libjpegcodecs.so文件链接不成功,提示, relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC 原因是/usr/local/libjpeg.a 没有在预编译时候用 “-fPIC”编译,
原因是我用了protobuf的默认编译安装方式安装的,也即是confiure、make && make install的步骤,如此生成的静态库libjpeg.a不是fPIC object,所以不能被其它动态库使用(因64位的so必须使用-fPIC编译选项,所有要求所链接的静态库也必须是带-fPIC编译)。
https://blog.youkuaiyun.com/sdghchj/article/details/73610949(参考这位大侠的文章 sdghchj )
解决办法是在confiure步骤时加上两个变量参数:./configure CFLAGS="-fPIC" CXXFLAGS="-fPIC"
1:重新下载 jpegsrc.v9c.tar.gz
2:在Ubuntu 中tar -zxvf jpegsrc.v9c.tar.gz:解压,切换到jpeg-9c/路径然后看到 configure文件
3:./configure CFLAGS="-fPIC" CXXFLAGS="-fPIC" (主要的是fPIC预编译)
4:make -j4 (后面是2,4,8的看自己电脑多少核去了)
5:这个时候在当前目录下生成了一堆的 .o文件啥的,这个时候小伙子你还有最关键的一步没有做,成功近在咫尺,看如下
6:make install,稍等片刻后,你就 cd /usr/local/lib 路径可以ls 看到里面就有新生成的libjpeg.a覆盖原先的,ls -al 可以看到生成文件生成时间,然后大胆用吧man