2

我对 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-File 中的某处显式地具有动态链接?或者还有什么问题?

4

3 回答 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 )
于 2017-07-31T09:01:02.910 回答
3

If you have anaconda installed, please remove it from the path (in your ~/.zshrc / ~/.bashrc), then restart your shell.

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

Then, try making the project again.

Disclaimer: Works on my machine :)

My configuration: Kubuntu 16.04 x64

于 2018-05-25T17:31:50.463 回答
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 

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

于 2019-11-19T06:17:24.493 回答