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

来源:互联网 发布:关于绘画的软件 编辑:程序博客网 时间:2024/06/06 00:22

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 successset(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 packagesfind_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

2 0
原创粉丝点击