系统相关
首页 > 系统相关> > c – 在Ubuntu 14.04下与`libopencv_highgui.so`链接错误,与`libtiff.so.5的奇怪结果

c – 在Ubuntu 14.04下与`libopencv_highgui.so`链接错误,与`libtiff.so.5的奇怪结果

作者:互联网

问题

我正在Ubuntu 14.04(64位)编译深度学习库Caffe.

从ubuntu软件包服务器安装OpenCV(版本:2.4.8 dfsg1-2ubuntu1):

sudo apt-get install libopencv-dev

使用CMake 2.8编译Caffe.

链接错误:

Linking CXX executable caffe-

/usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.8: undefined reference to `TIFFOpen@LIBTIFF_4.0′

信息来源

似乎找不到TIFF库的一些符号.我努力找到原因(没有运气).这是关于库的一些信息.

由libopencv_highgui.so.2.4.8链接的TIFF库

$ldd libopencv_highgui.so.2.4.8 | grep tiff

libtiff.so.5 => /usr/lib/x86_64-linux-gnu/libtiff.so.5 (0x00007f978313b000)

导入libopencv_highgui.so.2.4.8的符号

$readelf -s libopencv_highgui.so.2.4.8 |grep TIFFOpen

62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND TIFFOpen@LIBTIFF_4.0 (9)

注意:符号名称中只有一个@.

$nm -D libopencv_highgui.so.2.4.8| grep TIFFOpen

U TIFFOpen

导出libtiff.so.5的符号:

$nm -D /usr/lib/x86_64-linux-gnu/libtiff.so.5

0000000000000000 A LIBTIFF_4.0

00000000000429f0 T TIFFOpen

$readelf -s /usr/lib/x86_64-linux-gnu/libtiff.so.5|grep TIFFOpen

99: 00000000000429f0 239 FUNC GLOBAL DEFAULT 12 TIFFOpen@@LIBTIFF_4.0

注意:符号名称中有两个@(@@).

我的困惑

>是因为libtiff.so.5在符号名称中有@@而不是@,这导致了链接错误

libopencv_highgui.so.2.4.8: undefined reference to ‘TIFFIsTiled@LIBTIFF_4.0’

  >符号名称中@和@@的区别是什么?
  > libtiff.so.5中符号名称后缀LIBTIFF_4.0的含义是什么?
  >很多人说这是因为OpenCV需要libtiff4-dev,Ubuntu 14.04不提供.那么为什么Ubuntu家伙在包服务器上放了一个破损的包.
  >如何解决链接问题?
  
  
  

我不是编译和链接的专业.对不起这么长的帖子.什么为你们提供足够的信息来帮助我.
感谢任何建议.

附:如果您需要有关这些库的更多信息,请随时在评论中说明.

解决方法:

我有类似的问题,这是由于Anaconda搞砸了

我只需要执行以下命令:

conda remove libtiff

我通过以下方式安装了opecv:

sudo apt-get install opencv-dev

和libtiff通过:

sudo apt-get install libtiff4-dev

标签:dynamic-linking,c,opencv,elf,unresolved-external
来源: https://codeday.me/bug/20191006/1860306.html