x86平台迁移到arm后emmintrin.h: No such file or directory问题

背景

目前在工作中遇到需要将原先在x86平台上运行的系统搬到arm平台上,因此需要对软件做arm适配,在做适配的过程中,遇到一些问题,也才了一些坑,因此在此记录一下。
本文描述的问题是,某些软件在x86上会用到emmintrin.h文件,但是移植到arm平台后,编译过程中提示emmintrin.h文件找不到。
fatal error: emmintrin.h: No such file or directory• 关于emmintrin.h的介绍https://zh.wikipedia.org/zh-hans/SSE2

问题根因

出现这个问题的原因是在arm CPU不支持SSE2,自然程序也就找不到emmintrin.h文件。

解决方案

此问题目前的结局方案就是使用sse2neon.h文件替换emmintrin.h文件

  1. sse2neon.h文件可以在https://github.com/DLTcollab/sse2neon/这个repo下载:A translator from Intel SSE intrinsics to Arm/Aarch64 NEON implementation
  2. 另外还需要再编译时开启以下选项,-march=armv8-a+fp+simd+crypto+crc需要根据你机器的arm版本决定
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8-a+fp+simd+crypto+crc")                                                                                                                                    
                                                                                                                                                                                 
add_compile_options(-O3)3. 
  1. 此处还有一个坑,如果你的gcc版本过低,那么即使开启了-O3选项,也会出现编译失败的问题,目前我是用gcc 10.1版本是支持的,但是gcc 4.8.5不支持。

吐槽

如果你使用的cpu是鸿蒙的,那么针对此问题,华为给出了一个arm上的emmintrin.h文件,该文件可以在这里找到:https://github.com/DLTcollab/sse2neon/,但是该实现只开源了部分,极大可能替换该文件后,仍然编译时提示某些函数找不到。

posted @ 2023-09-05 14:51  荒唐了年少  阅读(1454)  评论(0编辑  收藏  举报