在 Odroid XU4 上编译 NEON 代码

Compiling NEON code on an Odroid XU4

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

我在包中添加了以下编译器标志 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

中定义

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

感谢您的帮助

我已经弄清楚问题出在哪里了。由于在这个 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}")