在 Ubuntu 14.04 下将错误与“libopencv_highgui.so”链接,与“libtiff.so.5”
Linking error with `libopencv_highgui.so` under Ubuntu 14.04, strange result with `libtiff.so.5`
>问题
我正在 Ubuntu 14.04(64 位(中编译深度学习库 Caffe。
OpenCV(Version: 2.4.8+dfsg1-2ubuntu1
(是从ubuntu软件包服务器安装的:
sudo apt-get install libopencv-dev
使用 CMake 2.8 编译Caffe
。
链接错误:
链接 CXX 可执行咖啡-
/usr/lib/x86_64-linux-gnu/libopencv_highgui.so.2.4.8:对"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 0FUNC 全局默认值 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
000000000000000000A LIBTIFF_4.0
。
00000000000429f0 T TIFFOpen
。
$ readelf -s/usr/lib/x86_64-linux-gnu/libtiff.so.5|grep TIFFOpen
99: 00000000000429f0 239 FUNC 全局默认值 12 TIFFOpen@@LIBTIFF_4.0
注: 符号名称中有两个@
(@@
(。
我的困惑
- 是因为
libtiff.so.5
符号名称中@@
而不是@
导致链接错误吗libopencv_highgui.so.2.4.8:未定义对"TIFFIsTiled@LIBTIFF_4.0"的引用
- 符号名称中的
@
和@@
有什么区别? libtiff.so.5
中符号名称的后缀LIBTIFF_4.0
的含义是什么?- 很多人说这是因为OpenCV需要
libtiff4-dev
而Ubuntu 14.04没有提供。那么为什么 Ubuntu 的人在包服务器上放了一个损坏的包。 - 如何解决链接问题?
我不是编译和链接的职业。对不起这么长的帖子。只是提供足够的信息让你们帮助我。感谢任何建议。
附言如果您需要有关这些库的更多信息,请随时在评论中说。
我有类似的问题,这是由于蟒蛇搞砸了
我只需要执行以下命令:
conda remove libtiff
我通过以下方式安装了欧佩克:
sudo apt-get install opencv-dev
和自由蒂夫通过:
sudo apt-get install libtiff4-dev
老问题,但仍然没有答案,所以它在这里(我今天遇到了同样的错误(:
-
这不是链接器失败的原因。如果它能够找到libtiff.so.5,它的链接就会很好。
-
@ vs @@ 只是跟踪函数不同版本的一种方法。更多详情请点击此处 https://sourceware.org/binutils/docs/ld/VERSION.html
-
LIBTIFF_4.0 表示动态加载符号时需要特定版本的 TIFFOpen。
-
这可能是解决问题的好方法。如果没有 libtiff-dev 包,libtiff.so 符号链接文件可能不会在/usr/lib/x86_64-linux-gnu/中退出,因此链接器将无法找到库(它对 libtiff.so.5 一无所知,除非您明确告诉它(。
-
一个。您也许可以测试 4。通过从命令行自行调用链接器命令行。如果你用cmake编译了caffe,你可以在tools/CMakeFiles/caffe.bin.dir/link.txt下找到链接器命令。只需将/usr/lib/x86_64-linux-gnu/libtiff.so.5 添加到命令行,它就可以工作了。
b. 或者手动创建符号链接/usr/lib/x86_64-linux-gnu/libtiff.so
c. 安装 dev 包,它应该会为你执行此操作。还要确保 cmake 知道/usr/lib/x86_64-linux-gnu/通过指定额外的库路径
D.检查您的系统中是否潜伏着其他 libtiff.so 库,如果前面的步骤不起作用(例如Anconda类型的东西(
希望对您有所帮助。
install libtiff4-dev:
sudo apt-get install libtiff4-dev
这是对我有用的:转到 Tiff 网站,按照说明下载 Tiff 并构建它,然后安装它。然后在您的制作文件中添加以下内容:
-L/[path to libtiff.so] -ltiff
如果你想知道通往 libtiff.so 的路径试试这个:
sudo find /usr/ -name libtiff.so
如您所见
62: 0000000000000000 0 FUNC GLOBAL DEFAULT UND TIFFOpen@LIBTIFF_4.0 (9)
有一个UND
我认为这意味着undefined
.我猜当 ubuntu 生产 libopencv_highgui
时,它找不到TIFFOpen@LIBTIFF 4.0
。所以我想我应该手头有libtiff
并再次编译libopencv_xxx
。
我喜欢在康达中包含东西。所以我用 conda 再次安装 opencv,并将我的LIBRARY_PATH
指向 conda lib 目录,事情进展顺利。
- 在Ubuntu 16.04上安装Cilk时出现问题
- 如何使用ndk-build.cmd构建Android.so文件
- 如何在Ubuntu中使用cmake设置qt4
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 在C++代码中包含opencv时,使用ctypes创建.so文件
- 无法将 GLFW 库与 Ubuntu 18.04 上的头文件链接
- 无法在Ubuntu上将共享库与Eclipse链接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 树莓上的 Libtorch 无法加载 pt 文件,但在 ubuntu 上工作
- CLANG格式在缺少libtinfo.so.5库中不起作用
- C++ 运行时链接器错误 (liblog4cpp.so.5) Eclipse
- 在 Ubuntu 16.04 中找不到 libicui18n.so.58
- 有没有办法在 UBUNTU 中的大型库文件夹(.a 和 .so 文件)中搜索函数
- ubuntu 12.04 中的 openCV 程序编译错误"libopencv_core.so.2.4: cannot open shared object file: No such file or
- 在 Ubuntu 14.04 下将错误与“libopencv_highgui.so”链接,与“libtiff.so.5”
- 为什么应用程序找不到这个libSDL2_image-2.0.so.0库?-Ubuntu 14.04
- 为什么在 Ubuntu 下编译 CUDA 示例时找不到 libcudart.so.4
- 当我尝试在 Ubuntu bash 中运行我的程序时,出现此错误:" /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21
- 使用C *.so库在c++项目(Ubuntu)使用c *.所以库在c项目(ubuntu)
- c++ /ubuntu about .a and .so