Error in '/usr/bin/c++': double free or corruption (top)问题解决

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/handsome_for_kill/article/details/70239573

Error in ‘/usr/bin/c++’: double free or corruption (top)问题解决

在把笔记本上能够编译的CMake工程放到arm上面去编译时,结果无法编译,然后一直报错:

Error in '/usr/bin/c++': double free or corruption (top): 0x0009bb58

经过研究发现,这是由于CMake工程中CMakeLists.txt中的一句话出现了问题,删除这句话就可以编译通过了。展示一下我的CMakeLists.txt代码片段

cmake_minimum_required(VERSION 2.8.3)
project(imu_reader)

# Guarantee compile success
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=native -Wall -pthread -std=c++11 -fPIC")
if(${CMAKE_HOST_SYSTEM_PROCESSOR} MATCHES "arm*")
  message(STATUS "ARM processor detected, will attempt to use NEON.")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon")
else()
  message(STATUS "Assuming SSE instructions available.")
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mssse3")
endif()

## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS
  roscpp
  std_msgs
  sensor_msgs
  geometry_msgs
)

上面这段代码里面最关键的、需要修改的是

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march -Wall -pthread -std=c++11 -fPIC")

这里把-march=native给删除掉,改成

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pthread -std=c++11 -fPIC")

就可以编译通过了。

进一步解释

参数-march=native的意思是,通过确定编译机的处理器类型来选择CPU在编译时生成代码。但一般都是对于i386、x86-64的机器类型而言的,arm的机器不用指定这个参数。具体的细节可以参考如下网址:
http://blog.csdn.net/terminatorsong/article/details/7384730
http://blog.csdn.net/brightming/article/details/50508300

猜你喜欢

转载自blog.csdn.net/handsome_for_kill/article/details/70239573