问题目录
问题0、没有root权限怎么安装colmap?
问题1、ERROR: SiftGPU not fully supported/Could not connect to any X display
问题2、Cannot specify include directories for imported target "freeimage::FreeImage".
问题3、could not find ZL4
问题4、Unable to locate package nvidia-cuda-toolkit-gcc
问题5、需要设置CMAKE_CUDA_ARCHITECTURES
问题6、colmap安装 libfreeimage.so: undefined reference to TIFFFieldName@LIBTIFF_4.0
本文解决在Linux下安装COLMAP时候遇到的如下问题:没有root权限怎么安装colmap?ERROR: SiftGPU not fully supported/Could not connect to any X display。Cannot specify include directories for imported target “freeimage::FreeImage”。could not find ZL4。Unable to locate package nvidia-cuda-toolkit-gcc。需要设置CMAKE_CUDA_ARCHITECTURES。
问题0、没有root权限怎么安装colmap?
问题:如果你在实验室里面,发现自己没有权限,无法安装colmap的依赖包。
解决方案:跑到实验室管理账号的大师兄(管理员)面前嚎啕大哭!诉求:1、师兄帮我装colmap。2、跪到地上求师兄给个临时的root权限,不给就赖着不走,抱着他的腿使劲哭。3、把需要root命令的地方发给大师兄、管理员,让他用sudo权限执行这几条命令。4、最后,记得客客气气的夸师兄,并请师兄吃好吃的。
问题1、ERROR: SiftGPU not fully supported/Could not connect to any X display
问题:今天是2023年10月7日,COLMAP已经支持GPU计算一些步骤,当设备包含显卡的时候,通过sudo apt install colmap不能正常使用,导致出现SiftGPU不支持、或者需要显示器的支持。
原因:是sudo apt install colmap导致的,这种预编译的包与自己的设备显卡不适配。
解决方案:卸载apt install的colmap,自己编译一遍。卸载:sudo apt remove colmap
,自己安装参见colmap tutorial以及我下文的踩坑记录。
参考:
- [1] WSL 2下Linux Colmap出错“Shader not supported by your hardware!“和“SiftGPU not fully supported“
问题2、Cannot specify include directories for imported target “freeimage::FreeImage”.
git clone https://github.com/colmap/colmap.git
cd colmap
git checkout dev
mkdir build
cd build
cmake .. -GNinja
ninja
sudo ninja install
问题:在Linux上安装colmap的时候,运行到cmake .. -GNinja
这一句的时候,出现:Cannot specify include directories for imported target “freeimage::FreeImage”。但是,实际上freeimage已经安装好了。(如果没有安装,就sudo apt-get install libfreeimage3 libfreeimage-dev
)
定位:在git clone下得colmap/cmake/FindFreeImage.cmake文件中,第96-98行:
target_include_directories(
freeimage::FreeImage INTERFACE ${FREEIMAGE_INCLUDE_DIRS})
target_link_libraries(
freeimage::FreeImage INTERFACE ${FREEIMAGE_LIBRARIES})
可能原因:cmake版本在3.11之前,target_include_directories
命令有一些问题,需要升级cmake版本。通过cmake -version
命令查看当前版本。
升级cmake:不要使用apt update cmake
的方法,会导致异常。建议在自己的目录下安装新的cmake包,作为优先的cmake路径。
# 下载cmake源码包
wget https://github.com/Kitware/CMake/releases/download/v3.21.4/cmake-3.21.4-linux-x86_64.tar.gz
# 解压
tar -xzvf cmake-3.21.4-linux-x86_64.tar.gz
将下载的cmake-3.21.4文件夹下的/bin加入PATH中,并且放到以前的PATH之前。Linux搜索cmake可执行文件的时候会沿着PATH的路径挨个寻找,如果先遇到cmake-3.21.3/bin路径下的cmake,就会直接使用cmake-3.21,相当于升级了cmake。
cd cmake-3.21.4-linux-x86_64/bin # 得到cmake-3.21的路径
pwd # 查看当前路径,我的路径是/data/zwn21/software/cmake/cmake-3.21.4-linux-x86_64/bin
export PATH=/data/zwn21/software/cmake/cmake-3.21.4-linux-x86_64/bin:$PATH
# 临时的方法,如果有必要就把这句话放到.bashrc文件中。
# where cmake的输出,看到自己的cmake目录排在前面,证明使用了新版本cmake
/data/zwn21/software/cmake/cmake-3.21.4-linux-x86_64/bin/cmake
/usr/bin/cmake
# cmake -version的输出,确实是新版本了。
cmake version 3.21.4
CMake suite maintained and supported by Kitware (kitware.com/cmake).
本问题的参考:
- [1] Installation — COLMAP 3.9-dev documentation;
- [2] cmake升级、更新(ubuntu18.04);
- [3] cmake:Cannot specify include directories for imported target。
问题3、could not find ZL4
问题:
CMake Error at cmake/FindLZ4.cmake:91 (message):
Could not find LZ4
Call Stack (most recent call first):
cmake/FindDependencies.cmake:18 (find_package)
CMakeLists.txt:86 (include)
原因:可能还没有安装zl4,也可能是没在路径中,找不到这个库。
解决方案:装上它,sudo apt -y install liblz4-dev
。
参考:
- [1] How to fix build ‘lz4 library not found, compiling without it’
问题4、Unable to locate package nvidia-cuda-toolkit-gcc
问题:在按照colmap教程安装cuda依赖的过程中,出现Unable to locate package nvidia-cuda-toolkit-gcc的问题。
# 命令
sudo apt-get install -y \
nvidia-cuda-toolkit \
nvidia-cuda-toolkit-gcc
# 输出
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package nvidia-cuda-toolkit-gcc
解决方案:未必是自己没安装好,只是自己的路径不够完整。
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
参考:
- [1]【CUDA】apt install nvidia-cuda-toolkit;Please ask your administrator.
问题5、需要设置CMAKE_CUDA_ARCHITECTURES
问题:在cmake .. -GNinja
的过程中,需要
CMake Error at cmake/FindDependencies.cmake:125 (message):
You must set CMAKE_CUDA_ARCHITECTURES to e.g. 'native', 'all-major', '70',
etc. More information at
https://cmake.org/cmake/help/latest/prop_tgt/CUDA_ARCHITECTURES.html
Call Stack (most recent call first):
CMakeLists.txt:86 (include)
解决方案:查看自己显卡的版本号,并按照版本号添加CMAKE_CUDA_ARCHITECTURES的数值。
版本号参见该链接:You must set CMAKE_CUDA_ARCHITECTURES to e.g. ‘native’, ‘all-major’, ‘70’
我是20系的显卡,最后执行命令:cmake .. -GNinja -DCMAKE_CUDA_ARCHITECTURES='75'
参考:
- [1] You must set CMAKE_CUDA_ARCHITECTURES to e.g. ‘native’, ‘all-major’, ‘70’
我没有别的问题了,最后记得请师兄和帮忙的朋友吃好吃的。
问题6、colmap安装 libfreeimage.so: undefined reference to TIFFFieldName@LIBTIFF_4.0
原issue链接 https://github.com/colmap/colmap/issues/188
colmap make的时候出现一大片类似的报错
libfreeimage.so: undefined reference to `TIFFFieldName@LIBTIFF_4.0'
这个其实大概率是因为安装了anaconda,所以环境变量PATH里anaconda的搜索在/usr/lib/x86_64-linux-gnu之前,因此导致使用的是anaconda的QT5(图片来自github)
解决方法是在colmap根目录的CMakeLists.txt
里添加
SET(CMAKE_PREFIX_PATH "/usr/lib/x86_64-linux-gnu/cmake")
另一种解决办法是修改当前terminal的PATH变量
首先
echo $PATH
将返回值中不包含anaconda的部分复制出来,然后export就行,比如我的返回值是
/home/kunbpc/Installed/Anaconda3/bin:/home/kunbpc/Installed/Anaconda3/condabin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
那么我export的命令就是
export PATH=/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
然后重新做就OK