colmap安装的坑
问题
cmake .. -GNinja -DCMAKE_CUDA_ARCHITECTURES='70'
ninja
运行后报如下错误:
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/libfreeimage.so: undefined reference to TIFFFieldTag@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/libfreeimage.so: undefined reference to TIFFFieldName@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/libfreeimage.so: undefined reference to TIFFFieldReadCount@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/libfreeimage.so: undefined reference to TIFFFieldPassCount@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/libfreeimage.so: undefined reference to TIFFFieldDataType@LIBTIFF_4.0'
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/libfreeimage.so: undefined reference to _TIFFDataSize@LIBTIFF_4.0'
解决方法
经过一通检查发现所要找的函数均在libtiff 5.2.2和5.7的版本中都有,不知为何就是链接不上
1. 在CMaktLists.txt中加入
set(CMAKE_PREFIX_PATH "/usr/lib/x86_64-linux-gnu/cmake")
使它找到正确的库,而不是到anoconda3中去找相应函数
2.用如下cmake生成相应文件,不用ninja
cmake .. -DCMAKE_CUDA_ARCHITECTURES='70'
下一步可能用以下两种方式之一编译,不同ubuntu版本情况不同
2.1 (ubuntu20.4) 在CMakeFiles/colmap_exe.dir/link.txt 中加一个 -ltiff的链接 选项在-lfreeimage前面。
2.2(ubuntu22.4) 若没有上述的一堆-l命令在link.txt 内,直接make -j10即可。
3 make -j10
最后成功编译
[ 6%] Built target sift_gpu
[ 25%] Built target vlfeat
[ 27%] Built target lsd
[ 31%] Built target poisson_recon
[ 91%] Built target colmap
[ 93%] Built target colmap_cuda
[ 93%] Linking CXX executable colmap
[100%] Built target colmap_exe
在Ubuntu系统中安装colmap时遇到CUDA架构设置为70的cmake构建过程中的链接错误,问题源于libfreeimage.so对LIBTIFF_4.0的函数引用未定义。解决方案包括在CMakeLists.txt中设置CMAKE_PREFIX_PATH,确保使用正确的库路径,以及根据Ubuntu的不同版本,在链接阶段添加-ltiff选项或直接执行make-j10进行编译。最终成功编译并构建了colmap及其相关组件。
568





