C++解决Debug无法进入第三方库调试代码和CMakeLists编写问题

举报
qingchenwuhou 发表于 2022/08/05 17:57:05 2022/08/05
【摘要】 debug自己项目时,无法进入第三方库colmap,调试代码,编写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)、还有其他的信息到相应变量。

更好的做法是指定具体搜索目录:

set(COLMAP_DIR   my_installed_colmap_path/share/colmap/) 
find_package(COLMAP   REQUIRED)

include_directories(${COLMAP_INCLUDE_DIRS})

link_directories(
    ${COLMAP_LINK_DIRS}
)
message(STATUS "COLMAP_LINK_DIRS: ${COLMAP_LINK_DIRS}")

add_executable(helloworld hello_world.cc)
target_link_libraries(helloworld   ${COLMAP_LIBRARIES})

如上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


【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。