C++解决Debug无法进入第三方库调试代码和CMakeLists编写问题
1. 下载colmap源代码,修改 CMakeLists.txt
找到if(CMAKE_BUILD_TYPE)行,
在上一行添加:set(CMAKE_BUILD_TYPE "Debug"),以编译debug版本的colmap lib库,
从而在debug自己的项目时,可以进入colmap的代码,进行调试。
这一步很重要,如果没有这一步,编译的是release版本的colmap lib库,在debug自己项目时,无法进入colmap的代码。
2. 在colmap根路径:
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=my_installed_colmap_path
make -j5
make install
注意编译colmap时,要关闭anaconda环境,因为colmap依赖的一些库(如Qt5、sqlite3等),如果make连接时候,连接了anaconda的库,会导致出现错误。
3. 在colmap的官方文档(https://colmap.github.io/install.html#linux)中,有详细介绍怎么调用colmap作为第三方库:
如上,find_package会在服务器找到colmap的include路径(保存在变量:COLMAP_INCLUDE_DIRS)、lib库路径(保存在变量:COLMAP_LIBRARIES)、从CMake 配置项到lib库的连接关系(保存在变量:COLMAP_LINK_DIRS)、还有其他的信息到相应变量。
更好的做法是指定具体搜索目录:
如上cmake只在COLMAP_DIR路径搜索colmap的配置项,生成关于colmap的所有变量,比如COLMAP_LINK_DIRS 保存 连接到colmap所有依赖lib库 的路径。
这个很重要,我开始使用set(COLMAP_LIBRARIES ${COLMAP_ROOT}/lib/)的方法设置colmap的一些变量(比如头文件,依赖库,从CMake配置项到相关lib库的相对路径),总是有问题,说明我不能 列清楚 所有的变量、依赖库、连接关系。但是依靠cmake的命令find_package,他会自动搜索到所有相关的变量、依赖库和连接关系,保证完整和正确。
分析:
(1)COLMAP_DIR是一种规范写法,三方库名称+"_DIR",指定具体的cmake的配置项的路径,注意这个路径是make install后路径中的某个子文件,包含如下配置信息:
(2)include_directories放在add_executable(for编译执行文件)或者add_library(for编译库)前面,用于包含my项目依赖的(my项目的头文件和第三方库的头文件)的路径。
另一种写法是不用include_directories命令,而使用target_include_directories(${helloworld} ${COLMAP_INCLUDE_DIRS}) 命令,放在add_executable(for编译执行文件)或者add_library(for编译库)下一行,来添加头文件、依赖库(命令target_link_libraries)。
(3)link_directories很重要,(直觉)他会连接上所有需要的lib库。
4. 安装过程出现的问题:
(1) [ 28%] Built target flann
make: *** [Makefile:130: all] Error 2
网上https://github.com/colmap/colmap/issues/585,说是CUDA版本与gcc版本不兼容导致的,需要降低版本到 gcc < 7.0,
因为编译过程出现:error: #error -- unsupported GNU version! gcc versions later than 7 are not supported!
(2) 参考https://www.jianshu.com/p/6b2918963f9e,安装低版本的gcc-5,g++-5。
vim /etc/apt/sources.list,添加:deb http://cz.archive.ubuntu.com/ubuntu bionic main universe,
然后,apt-get update
apt-get install -y gcc-5
apt-get install -y g++-5
- 点赞
- 收藏
- 关注作者
评论(0)