Ubuntu 编译c++的一些总结

因为不太熟悉,每次编译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,这就是内存超过了。

猜你喜欢

转载自blog.csdn.net/weixin_43807148/article/details/113835617