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