本文解决在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。
问题:如果你在实验室里面,发现自己没有权限,无法安装colmap的依赖包。
解决方案:跑到实验室管理账号的大师兄(管理员)面前嚎啕大哭!诉求:1、师兄帮我装colmap。2、跪到地上求师兄给个临时的root权限,不给就赖着不走,抱着他的腿使劲哭。3、把需要root命令的地方发给大师兄、管理员,让他用sudo权限执行这几条命令。4、最后,记得客客气气的夸师兄,并请师兄吃好吃的。
问题:今天是2023年10月7日,COLMAP已经支持GPU计算一些步骤,当设备包含显卡的时候,通过sudo apt install colmap不能正常使用,导致出现SiftGPU不支持、或者需要显示器的支持。
原因:是sudo apt install colmap导致的,这种预编译的包与自己的设备显卡不适配。
解决方案:卸载apt install的colmap,自己编译一遍。卸载:sudo apt remove colmap
,自己安装参见colmap tutorial以及我下文的踩坑记录。
参考:
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).
本问题的参考:
问题:
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
。
参考:
问题:在按照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
参考:
问题:在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'
参考:
我没有别的问题了,最后记得请师兄和帮忙的朋友吃好吃的。