CMake / 链接 libfreeimage / libtiff 时出错

问题描述 投票:0回答:3

我对 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 和 libtiff (libfreeimage-dev / libtiff4-dev)。我还使用以下内容将 libtiff 显式添加到 CMakeLists-Files 中的依赖项中

find_package(TIFF REQUIRED)

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

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

c++ cmake shared-libraries ld
3个回答
4
投票

看起来 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 )

3
投票

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

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

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

免责声明:适用于我的机器:)

我的配置:Kubuntu 16.04 x64


1
投票

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

这些问题都是因为找不到合适的库文件导致的。

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

  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 

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

© www.soinside.com 2019 - 2024. All rights reserved.