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