【问题标题】:CMake / error when linking libfreeimage / libtiff链接 libfreeimage / libtiff 时出现 CMake / 错误
【发布时间】:2018-01-06 17:02:32
【问题描述】:

我对 CMake 很陌生,现在我正在尝试用它从 https://colmap.github.io/ 编译 COLMAP 软件。它编译模块,但在链接时失败并出现许多错误,例如

/usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libfreeimage.so: undefined reference to `TIFFReadEncodedStrip@LIBTIFF_4.0'

我通过 apt 软件包 (libfreeimage-dev / libtiff4-dev) 安装了 libfreeimage 和 libtiff。我还使用以下内容将 libtiff 显式添加到 CMakeLists-Files 中的依赖项中

find_package(TIFF REQUIRED)

set(COLMAP_LIBRARIES
...
${FREEIMAGE_LIBRARIES}
${TIFF_LIBRARIES}

我是否必须将库设置为在 CMake 文件中的某处显式地具有动态链接?或者还有什么问题?

【问题讨论】:

    标签: c++ cmake ld lib


    【解决方案1】:

    看起来 libfreeimage.so 正在尝试使用 tiff 库,例如在您的项目中包含 tiff:

    find_package( TIFF REQUIRED )
    if ( TIFF_FOUND )
        include_directories( ${TIFF_INCLUDE_DIRS} )
        target_link_libraries( yourprojectname ${TIFF_LIBRARIES} )
    endif( TIFF_FOUND )
    

    【讨论】:

      【解决方案2】:

      如果您安装了 anaconda,请将其从路径中删除(在您的 ~/.zshrc / ~/.bashrc 中),然后重新启动您的 shell。

      sudo apt-get remove libtiff5-dev
      sudo apt-get install libtiff5-dev
      

      然后,再次尝试制作项目。

      免责声明:在我的机器上工作:)

      我的配置:Kubuntu 16.04 x64

      【讨论】:

        【解决方案3】:

        我找到了解决它的方法。我希望它对你有用。

        这些问题是由于找不到合适的库文件造成的。

        如果还没有安装所需的包,请安装。如果您有所需的文件,但路径不正确,可以按照以下步骤解决。

        1. ldd /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libfreeimage.so

        找到依赖文件,会输出

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

        找到依赖文件后,下一步就是要用于替换文件其他位置的库文件的路径。

        2.locate libtiff.so

        会输出

            ...
        /home/username/anaconda3/lib/libtiff.so.5
        /root/anaconda3/lib/libtiff.so.5    /var/lib/docker/aufs/diff/0faa9badda6fc687ec25d69baecdf401799f90cde729b0bf9fb2ed24dff76e4e/usr/lib/x86_64-linux-gnu/libtiff.so.5
        ...
        

        你可以看到你要替换的路径。有时系统中有多个可用的项目,如果你不确定要使用哪一个,你可以尝试直到找到正确的文件。

        要创建软链接,源文件在ln命令前面,后面是依赖位置。例如,

        ln -sf /var/lib/docker/aufs/diff/07382a150bf28b01a386095ec78a8d2e92fbf670393b3bd16b6f8fbc2d159ae1/usr/lib/x86_64-linux-gnu/libtiff.so.5 /usr/lib/x86_64-linux-gnu/libtiff.so.5 
        

        最后重新编译,一般可以解决。祝你好运。

        【讨论】:

          猜你喜欢
          • 2015-09-22
          • 1970-01-01
          • 2012-06-21
          • 2018-12-18
          • 2015-12-07
          • 2020-10-21
          • 1970-01-01
          • 2014-05-28
          • 2019-09-04
          相关资源
          最近更新 更多