1、问题描述
open3d依赖的qhull为7.3.0,pcl-ros依赖的是qhull7.2.0,两者不兼容。
一个工程里如果用了open3d,又用了pcl-ros,运行时会报错。
由于一定要使用,就想办法把open3d用的qhull固定下来,做一些修改。
2、查看ExternalProject_Add的使用说明
https://cmake.org/cmake/help/latest/module/ExternalProject.html
在open3d中,原来是用
ExternalProject_Add(
ext_qhull
PREFIX qhull
URL https://github.com/qhull/qhull/archive/refs/tags/v7.3.0.tar.gz
URL_HASH SHA256=05a2311d8e6397c96802ee5a9d8db32b83dac7e42e2eb2cd81c5547c18e87de6
DOWNLOAD_DIR "${OPEN3D_THIRD_PARTY_DOWNLOAD_DIR}/qhull"
UPDATE_COMMAND ""
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
)
从网上下载的,改成指定目录:
ExternalProject_Add(
ext_qhull
PREFIX qhull
SOURCE_DIR /home/gumh/Workspace/Open3D/cpp/v7.3.0/qhull-7.3.0
DOWNLOAD_DIR "${OPEN3D_THIRD_PARTY_DOWNLOAD_DIR}/qhull"
UPDATE_COMMAND ""
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
)
注意SOURCE_DIR的作用:如果指定了download url,那么就会存储解压的数据。而这个参数也可以直接指定已经准备好的解压好的依赖工程。
3、将qhull中的命名空间进行修改
4、将open3d中用到的命名空间进行修改
运行之前有问题的代码,可以看到成功运行。
5、后续处理
1)将修改后的qhull放入自己的git中;
2)修改open3d中qhull.cmake,将url改为git地址
3)将修改后的open3d放入自己的git中;
4)安装open3d时,要求从自己的git中安装。
6、另外还有一点要注意的是
编译open3d时,加上编译选项:-DGLIBCXX_USE_CXX11_ABI=ON