您的位置:首页 > 运维架构

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

2017-12-20 15:57 736 查看

出现的错误:

/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 中,
4000


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 更新缓存。 

上述的操作中,说明这不是链接问题,而是库文件引发的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: