因为不太熟悉,每次编译c++都会出现各种错误,总结如下:
- 方法
最好使用cmake来编译,写好CMakeLists.txt文件,举例内容如下:
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
project(MY_GRAND_PROJECT)
set(PACKAGE_DEPENDENCIES
roscpp
sensor_msgs
pcl_ros
pcl_conversions
std_srvs
message_generation
std_msgs
)
find_package(PCL 1.3 REQUIRED COMPONENTS common io)
find_package(catkin REQUIRED COMPONENTS ${PACKAGE_DEPENDENCIES})
include_directories(${catkin_INCLUDE_DIRS} ${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable(main main.cpp)
target_link_libraries(main ${PCL_LIBRARIES} ${catkin_LIBRARIES} )
然后建立build,在里面终端依次cmake . . 和make,然后得到可执行文件之后运行./main
- 找不到.h文件
增加find_package(PCL 1.3 REQUIRED COMPONENTS common io)这样的内容,让它自己去找 - 没有报错找不到文件,但出现了一堆未定义
这是因为你没有把可执行文件和需要的动态库静态库链接起来,需要在target_link_libraries中加入有关库,如${catkin_LIBRARIES}
还有一种方法,就是把没找到定义的这个包,加到findpackage()中,如
find_package(catkin REQUIRED COMPONENTS
cmake_modules
roscpp
cv_bridge #出现未定义的那个包
sensor_msgs
image_transport
std_msgs
)
- malloc(): memory corruption
是内存超了,比如我设置了一个大小为300的点云,但索引到了3000,这就是内存超过了。