问题

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

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



使用 CMake 2.8 编译 Caffe

链接错误:



信息

似乎没有找到 TIFF 库的一些符号。我努力寻找原因(运气不好)。这里有一些关于图书馆的信息。

libopencv_highgui.so.2.4.8 链接的 TIFF 库



libopencv_highgui.so.2.4.8 的导入符号



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



导出 libtiff.so.5 的符号:



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

我的困惑

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

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




  • 我不是编译和链接的专业人士。很抱歉这么长的帖子。只是提供足够的信息让你们帮助我。
    感谢您的任何建议。

    如果您需要这些库的更多信息,请随时在评论中说。

    最佳答案

    老问题,但仍然没有答案,所以就这样吧(我今天遇到了同样的错误):

  • 这不是链接器失败的原因。如果它能够找到 libtiff.so.5,它就会链接得很好。
  • @ vs @@ 只是一种跟踪函数不同版本的方法。更多细节在这里 https://sourceware.org/binutils/docs/ld/VERSION.html
  • LIBTIFF_4.0 表示动态加载符号时需要特定版本的 TIFFOpen。
  • 这可能是解决问题的好方法。如果没有 libtiff-dev 包,libtiff.so 符号链接(symbolic link)文件很可能不会在/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 添加到命令行,它应该可以工作。

    湾或者手动创建符号链接(symbolic link)/usr/lib/x86_64-linux-gnu/libtiff.so

    C。安装 dev 包,它应该为你做这件事。还要确保 cmake 知道/usr/lib/x86_64-linux-gnu/通过指定额外的库路径

    d.如果前面的步骤不起作用,请检查系统中是否没有其他 libtiff.so 库(例如 anconda 类型的东西)

  • 希望能帮助到你。

    关于c++ - 在 Ubuntu 14.04 下与 `libopencv_highgui.so` 链接错误,结果为 `libtiff.so.5`,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29272497/

    10-15 13:31