opencv-2.4.13.4在ubuntu16.04安装遇到的一些问题

出现的错误:

/usr/bin/ld: warning: libiconv.so.2, needed by //home/smiles/anaconda2/lib/libgobject-2.0.so.0, not found (try using -rpath or -rpath-link)
/usr/bin/ld: warning: libpcre.so.1, needed by //home/smiles/anaconda2/lib/libgobject-2.0.so.0, not found (try using -rpath or -rpath-link)
//home/smiles/anaconda2/lib/libglib-2.0.so.0:对‘libiconv_open’未定义的引用
//home/smiles/anaconda2/lib/libglib-2.0.so.0:对‘libiconv_close’未定义的引用
//home/smiles/anaconda2/lib/libglib-2.0.so.0:对‘libiconv’未定义的引用
collect2: error: ld returned 1 exit status
apps/annotation/CMakeFiles/opencv_annotation.dir/build.make:106: recipe for target ‘bin/opencv_annotation’ failed
make[2]: * [bin/opencv_annotation] Error 1
CMakeFiles/Makefile2:7604: recipe for target ‘apps/annotation/CMakeFiles/opencv_annotation.dir/all’ failed
make[1]: * [apps/annotation/CMakeFiles/opencv_annotation.dir/all] Error 2
make[1]: * 正在等待未完成的任务….

问题分析:/home/smiles/anaconda2/lib/libgobject-2.0.so.0需要调用libiconv.so.2,但是没有被找到。在本地搜索,在/home/smiles/anaconda2/lib路径下确实存在。

1. 使用以下命令,可以查看gcc编译器是否能找到对应的动态依赖库:

    gcc /home/smiles/anaconda2/lib/libiconv.so.2 --verbose

2. 不管用的方法:

ln -sf /home/smiles/anaconda2/lib/libiconv.so.2 libiconv.so.2
ln -sf /home/smiles/anaconda2/lib/libpcre.so.1 libpcre.so.1

ln -sv /home/smiles/anaconda2/lib/libiconv.so.2 libiconv.so.2
ln -sv /home/smiles/anaconda2/lib/libpcre.so.1 libpcre.so.1

编辑~/.bashrc,在LD_LIBRARY_PATH后添加/home/smiles/anaconda2/lib也不行
echo $LD_LIBRARY_PATH 查看LD_LIBRARY_PATH

3. 管用的方法:
参考的链接:http://blog.csdn.net/yangdashi888/article/details/52088264
3.1 这次,我是用cmake-gui界面生成的工程,不是在shell下输入cmake命令创建工程。
3.2 然后,我改了生成为release版本,然后关于python的包的路径,都改成了anaconda2下面的路径。
3.3 在/etc/ld.so.conf.d下创建一个opencv.conf文件

    sudo gedit /etc/ld.so.conf.d/opencv.conf

添加以下信息:

    /usr/local/lib
    /home/smiles/anaconda2/lib
    sudo ldconfig

3.4 接着,执行sudo make -j16,等待一会在/home/smiles/opencv-2.4.13.4/build/lib目录下就会生成cv2.so文件,在该路径下打开终端,import cv2就可以调用2版本的opencv。

编译时错误产生的原因:
http://www.linuxidc.com/Linux/2012-07/64814.htm 中,说
Linux下编译应用程序常常会出现如下错误:
/usr/bin/ld: cannot find -lxxx意思是编译过程找不到对应库文件。其中,-lxxx表示链接库文件 libxxx.so。
一般出现这种错误有以下几种原因:
1.系统缺乏对应的库文件;
2.版本不对应;
3.库文件的链接错误;
4.库文件路径设置问题;
对应第一第二种情况,可以通过下载安装lib来解决,Ubuntu大多数可以直接通过apt-get来安装:
apt-get install libxxx-dev

一般遇到这种问题去检查系统是否已安装该lib或者是否已选择正确版本(只是习惯问题),如果还是不能解决问题,那么,引起错误的原因不是链接错误就是库文件路径问题了。

通过find指令定位到链接文件,查看链接文件是否正确的指向了我们希望的lib,如果不是,用 ln -sf /libxxx.so.x /libxxx.so 指令修改它。

如果是库文件路径引发的问题,可以到/etc/ld.so.conf.d目录下,修改其中任意一份conf文件,(可以自建conf,以方便识别)将lib所在目录写进去,然后在终端输入 ldconfig 更新缓存。 

上述的操作中,说明这不是链接问题,而是库文件引发的问题。

你可能感兴趣的:(Opencv学习)