【 apollo7.0-arm编译问题】:-msse4.1/__128i/等报错
在aarch64架构编译apollo7.0中的spatio_temporal_ground_detector模块时,
提示报错:
gcc: error: unrecognized command line option ‘-msse4.1’
原因在于:
-m打开与硬件相关的一些选项,sse便是针对x86、x86_64进行的优化,在ARM上没有这个选项。
同时spatio_temporal_ground_detector模块依赖perception/common/i_lib/pc
在编译pc/i_struct_s.h提示报错:
__m128i、_mm_set1_epi32等相关的内容未定义。
这些内容定义在emmintrin.h中,
但emmintrin.h是Intrinsic的一部分。在MMX,SSE系列中,intrinsics表示一种封装的MMX或者SSE指令。
这些都是intel推出的在x86架构下指令集,arm是无法使用的。
因此,需要将其改写为neon的代码,即在arm架构下可以使用的指令集。这一步操作,英特尔提供了相应的函数,也就是sse2neon.h。
解决方案:
下载文件sse2neon.h:下载地址
将该文件拷贝到apollo-docker环境下:/usr/include/ (任意可以识别到路径都可以)
在pc/i_struct_s.h中:#include “sse2neon.h”
在spatio_temporal_ground_detector模块的BUILD文件中:去掉或注释 #copts = [“-msse4.1”],
即可。
参考:
[1] aarch64架构编译osgearth2.10过程中报错,找不到emmintrin.h
[2] Jetson ARM SeetaFace编译
[3] mirrors / dltcollab / sse2neon