我对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-File中的某处具有动态链接?或者还有什么问题?
答案 0 :(得分: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 )
答案 1 :(得分:1)
如果您安装了anaconda,请将其从路径中删除(在〜/ .zshrc /〜/ .bashrc中),然后重新启动shell。
sudo apt-get remove libtiff5-dev
sudo apt-get install libtiff5-dev
然后,再次尝试制作项目。
免责声明:在我的机器上运行:)
我的配置:Kubuntu 16.04 x64
答案 2 :(得分: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
最后重新编译,一般可以解决。祝你好运。