ubuntu搭建PCL和liblas过程中遇到的一些问题汇总

本文记录在Ubuntu上编译安装PCL和liblas时遇到的关键问题,包括cmake版本问题、源码问题以及编译时库依赖问题。在编译PCL时,虽然大部分依赖库已正确找到,但存在Boost版本不匹配导致的警告。在编译liblas时,源码中存在错误,并给出了相应解决方法。同时,还提到动态链接库未定义引用的问题及其解决方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

装这两个库真的是要吐了, 本文不教装环境,仅仅记录本人在装环境过程中出现的关键问题
liblas和PCL的安装就不多说了,网上教程一大堆,最重要的要了解有什么依赖库再动手,比如说boost,eigen,VTK,numpy,cmake等等一大堆,先装依赖库,装好了之后再去编译源码,关于PCL库没啥好说的,就是依赖库装好按着流程来就行了。
推荐链接:https://blog.youkuaiyun.com/sinat_28752257/article/details/79169647
在安装pcl的过程中,cmake…之后可以检查你的库是否能正常找到:
– The C compiler identification is GNU 5.4.0
– The CXX compiler identification is GNU 5.4.0
– Check for working C compiler: /usr/bin/cc
– Check for working C compiler: /usr/bin/cc – works
– Detecting C compiler ABI info
– Detecting C compiler ABI info - done
– Detecting C compile features
– Detecting C compile features - done
– Check for working CXX compiler: /usr/bin/c++
– Check for working CXX compiler: /usr/bin/c++ – works
– Detecting CXX compiler ABI info
– Detecting CXX compiler ABI info - done
– Detecting CXX compile features
– Detecting CXX compile features - done
– Found PkgConfig: /usr/bin/pkg-config (found version “0.29.1”)
– Could NOT find ClangFormat (missing: ClangFormat_EXECUTABLE ClangFormat_VERSION) (Required is at least version “10”)
– Performing Test HAVE_MARCH
– Performing Test HAVE_MARCH - Success
– Using CPU native flags for SSE optimization: -march=native
– Performing Test HAVE_MM_MALLOC
– Performing Test HAVE_MM_MALLOC - Success
– Performing Test HAVE_POSIX_MEMALIGN
– Performing Test HAVE_POSIX_MEMALIGN - Success
– Performing Test HAVE_SSE4_2_EXTENSIONS
– Performing Test HAVE_SSE4_2_EXTENSIONS - Success
– Performing Test HAVE_SSE4_1_EXTENSIONS
– Performing Test HAVE_SSE4_1_EXTENSIONS - Success
– Performing Test HAVE_SSSE3_EXTENSIONS
– Performing Test HAVE_SSSE3_EXTENSIONS - Success
– Performing Test HAVE_SSE3_EXTENSIONS
– Performing Test HAVE_SSE3_EXTENSIONS - Success
– Performing Test HAVE_SSE2_EXTENSIONS
– Performing Test HAVE_SSE2_EXTENSIONS - Success
– Performing Test HAVE_SSE_EXTENSIONS
– Performing Test HAVE_SSE_EXTENSIONS - Success
– Try OpenMP C flag = [-fopenmp]
– Performing Test OpenMP_FLAG_DETECTED
– Performing Test OpenMP_FLAG_DETECTED - Success
– Try OpenMP CXX flag = [-fopenmp]
– Performing Test OpenMP_FLAG_DETECTED
– Performing Test OpenMP_FLAG_DETECTED - Success
– Found OpenMP: -fopenmp
– Found OpenMP
– Looking for pthread.h
– Looking for pthread.h - found
– Looking for pthread_create
– Looking for pthread_create - found
– Found Threads: TRUE
– Checking for module ‘eigen3’
– Found eigen3, version 3.2.92
– Found Eigen: /usr/include/eigen3 (Required is at least version “3.1”)
– Eigen found (include: /usr/include/eigen3, version: 3.2.92)
– Checking for module ‘flann>=1.7.0’
– Found flann, version 1.8.4
– Found FLANN: /usr/lib/x86_64-linux-gnu/libflann_cpp.so (Required is at least version “1.7.0”)
– Found LIBUSB_1: /usr/lib/x86_64-linux-gnu/libusb-1.0.so
– Checking for module ‘libusb-1.0’
– Found libusb-1.0, version 1.0.20
– Found USB_10: /usr/lib/x86_64-linux-gnu/libusb-1.0.so
– Found OpenNI: /usr/lib/libOpenNI.so
– OpenNI found (include: /usr/include/ni, lib: /usr/lib/libOpenNI.so)
– Could NOT find OpenNI2 (missing: OPENNI2_LIBRARIES OPENNI2_INCLUDE_DIRS)
– OpenNI2 grabber support: not building because OpenNI2 not found
– Could NOT find ENSENSO (missing: ENSENSO_LIBRARIES ENSENSO_INCLUDE_DIRS)
– IDS-Imaging Ensenso camera support: not building because Ensenso not found
– Could NOT find davidSDK (missing: DAVIDSDK_LIBRARY DAVIDSDK_INCLUDE_DIR)
– David Vision Systems SDK support: not building because davidSDK not found
– Could NOT find DSSDK (missing: DSSDK_LIBRARIES DSSDK_INCLUDE_DIRS)
– DepthSense SDK support: not building because DSSDK not found
– Could NOT find RSSDK (missing: RSSDK_LIBRARIES RSSDK_INCLUDE_DIRS)
– RealSense SDK support: not building because RSSDK not found
– Could NOT find RSSDK2
– RealSense SDK 2.0 (librealsense) support: not building because RSSDK2 not found
– Checking for module ‘metslib’
– No package ‘metslib’ found
– Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version “1.2.8”)
– Found PNG: /usr/lib/x86_64-linux-gnu/libpng.so (found version “1.2.54”)
– Found Qhull: optimized;/usr/lib/x86_64-linux-gnu/libqhull.so;debug;/usr/lib/x86_64-linux-gnu/libqhull.so
– QHULL found (include: /usr/include, lib: optimized;/usr/lib/x86_64-linux-gnu/libqhull.so;debug;/usr/lib/x86_64-linux-gnu/libqhull.so)
– VTK_MAJOR_VERSION 7, rendering backend: OpenGL2
– VTK found (include: /usr/local/include/vtk-7.1, libs: vtkChartsCore;vtkCommonColor;vtkCommonCore;vtksys;vtkCommonDataModel;vtkCommonMath;vtkCommonMisc;vtkCommonSystem

<think>嗯,用户的问题是关于在Ubuntu系统中解决PCLOpenCV之间由于flann库冲突的问题。首先,我需要回忆一下这两个库为什么会冲突。记得PCLOpenCV都依赖于flann库,但可能各自使用不同的版本或者编译选项,导致链接时出现符号冲突。 根据用户提供的引用,有几个解决方法。比如调整CMake中的包含路径顺序,让PCL的头文件先于OpenCV被包含。这样编译器会优先使用PCL的flann,避免OpenCV的版本干扰。另外,用户提到可以手动修改CMakeLists.txt文件,或者在代码中避免使用using namespace cv,改用显式命名空间来区分。 还要考虑动态库的链接顺序,可能需要调整链接顺序,确保PCL的库在OpenCV之前。另外,是否有可能完全禁用其中一个库中的flann模块?比如,如果项目中没有用到OpenCV的flann,可以在编译OpenCV时禁用该模块,但这种方法可能需要重新编译,比较麻烦。 用户可能已经尝试过一些方法,比如添加头文件或者修改包含路径,但可能没有系统地进行调整。需要一步步指导,比如CMake的具体配置示例,如何检查包含路径是否正确,以及如何验证解决方案是否有效。同时,提醒用户进行测试,确保修改后程序能正常运行,没有其他未预见的冲突。 另外,用户可能是在使用VSCode或者类似IDE,所以需要说明如何在CMakeLists中调整设置,而不仅仅是命令行参数。还要注意不同版本的Ubuntu可能路径有所不同,需要用户根据实际情况调整路径。 总结解决方法:调整头文件包含顺序、显式命名空间、调整链接顺序、重新编译库。然后给出具体的步骤,比如修改CMakeLists.txt,添加PCL路径到OpenCV之前,使用命名空间等。最后,生成相关问题,帮助用户扩展了解类似问题。</think>### 分步解决方案:解决PCL与OpenCV的flann库冲突 以下是针对Ubuntu系统中PCLOpenCV因flann库冲突的详细解决方法: #### **方法1:调整CMake包含路径顺序** **核心思路**:强制编译器优先使用PCL的flann头文件,避免与OpenCV的flann库混淆。 **操作步骤**: 1. 在项目的`CMakeLists.txt`中,将PCL的包含路径放在OpenCV之前。例如: ```cmake include_directories( /usr/include/pcl-1.10 # PCL路径 ${OpenCV_INCLUDE_DIRS} # OpenCV路径 ) ``` 2. 在链接库时,同样优先链接PCL的相关库: ```cmake target_link_libraries(your_project ${PCL_LIBRARIES} ${OpenCV_LIBS} ) ``` 通过调整路径顺序,编译器会优先解析PCL的flann定义[^4]。 #### **方法2:显式指定命名空间** **核心思路**:避免使用`using namespace cv;`,改用显式命名空间调用OpenCV功能。 **示例代码**: ```cpp // 错误写法:using namespace cv; // 正确写法: cv::Mat image = cv::imread("image.jpg"); pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); ``` 此方法可避免命名空间污染,减少符号冲突[^3]。 #### **方法3:重新编译OpenCV/PCL** **适用场景**:若冲突无法通过路径调整解决,可尝试重新编译其中一个库。 **操作建议**: - **禁用OpenCV的flann模块**:在编译OpenCV时,通过CMake选项`-D BUILD_opencv_flann=OFF`关闭flann模块[^2]。 - **使用PCL内置flann**:确保PCL编译时正确启用了flann支持。 #### **方法4:检查动态库链接顺序** **核心思路**:在链接阶段调整库的顺序,确保PCL库优先加载。 **CMake示例**: ```cmake find_package(PCL REQUIRED) find_package(OpenCV REQUIRED) # 显式声明链接顺序 target_link_libraries(your_project ${PCL_LIBRARIES} ${OpenCV_LIBS} ) ``` #### **验证与调试** 1. **查看包含路径**:使用编译命令`make VERBOSE=1`检查实际包含路径顺序。 2. **符号冲突检查**:通过`nm -D`命令分析动态库中的符号定义,例如: ```bash nm -D /usr/lib/x86_64-linux-gnu/libopencv_flann.so | grep "flann::Index" ``` 对比PCLOpenCV中同名符号的差异。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值