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