我对 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 文件中的某处具有动态链接?或者还有什么问题?
看起来 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 )
如果您安装了 anaconda,请将其从路径中删除(在 ~/.zshrc / ~/.bashrc 中),然后重新启动 shell。
sudo apt-get remove libtiff5-dev
sudo apt-get install libtiff5-dev
然后,尝试再次制作该项目。
免责声明:适用于我的机器:)
我的配置:Kubuntu 16.04 x64
我找到了解决这个问题的方法。我希望它对你有用。
这些问题都是因为找不到合适的库文件导致的。
如果尚未安装所需的软件包,请安装。如果您已经有所需的文件,但路径不正确,可以按照以下步骤解决。
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
最后重新编译,一般可以解决。祝你好运。