1

我有一个 ROS 节点,其中包含由 Matlab 编码器生成的代码。生成此代码是为了利用 ARM Cortex A CPU 上的 NEON 指令集。我想在 Hardkernel Odroid XU4(在三星 Exynos5422 Cortex™-A15 2Ghz 和 Cortex™-A7 Octa 核心 CPU 上运行)上编译此代码。但是我没有成功编译/链接我的代码。

我在包 CMakeLists.txt 中添加了以下编译器标志:

 -mfloat-abi=softfp -mfpu=neon -O2.

然而,在编译期间,我收到以下错误消息:

/usr/lib/gcc/arm-linux-gnueabihf/4.8/include/arm_neon.h:32:2: error:
#error You must enable NEON instructions (e.g. -mfloat-abi=softfp -mfpu=neon) to use arm_neon.h

接下来是更多关于未知类型的错误:

/home/odroid/catkin_ws/src/vio_ros/src/codegen/mw_neon.c:12:2: error: unknown type name ‘float32x4_t’
/home/odroid/catkin_ws/src/vio_ros/src/codegen/mw_neon.c:36:2: error: unknown type name ‘int32x4_t’
...

还有很多。所有这些类型似乎都定义在arm_neon.h

我需要做什么才能编译我的代码?

谢谢你的帮助

4

1 回答 1

2

我已经弄清楚问题所在了。由于此 C++ 项目中正在编译的某些代码是 C 代码,因此我还必须为 C 设置编译器标志。在 CMakeLists.txt 中包含以下内容可使代码编译:

set(NEON_FLAGS "-DENABLE_NEON -mfloat-abi=hard -mfpu=neon-vfpv4 -mcpu=cortex-a15 -Ofast")
set(CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS} -Wno-format-security ${NEON_FLAGS}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${NEON_FLAGS}")
于 2015-11-23T12:14:24.467 回答