HarmonyOS鸿蒙Next中native工具链较高的版本无法兼容-fno-integrated-as选项编译汇编代码

HarmonyOS鸿蒙Next中native工具链较高的版本无法兼容-fno-integrated-as选项编译汇编代码

ANDROID NDK 可以编译是低版本 NDK 有选项 `-fno-integrated-as`,高版本没有了,需要自己补上;

Huawei SDK 高版本没有这个选项(早期的版本时没事,现在下载不到了),加上 `-fno-integrated-as` 会提示:

clang: error: unable to execute command: program not executable clang: error: assembler command failed with exit code 1 (use -v to see invocation) ninja: build stopped: subcommand failed.


请教一下为什么需要移除这个选项?移除后不支持编译应该如何解决呢?

相关代码示例,假设有个汇编文件 a.s 如下关键行:

```cpp
vmov.i32 d2, 0xffffff81

或者如下关键行:

vldr.s32 d14, [r0]

时,会提示:

operand must be a register in range [d0, d31]
vmov.i32 d2, 0xffffff81
                  ^

operand must be a register in range [s0, s31]
vldr.s32 d14, [r0]
               ^

请帮忙看看有什么可以类似 NDK 的 -fno-integrated-as 兼容方案,谢谢。

5 回复

开发者你好,请提供更多细节,是做安卓开发还是鸿蒙开发,编译的具体项目,具体操作,命令等,根据当前描述暂无法判断具体问题。

另外如果是编译Hi3518或者Hi3516解决方案,请参考device.harmonyos.com网站上关于环境搭建的介绍,检查当前工具链是否都按照描述正确安装。

更多关于HarmonyOS鸿蒙Next中native工具链较高的版本无法兼容-fno-integrated-as选项编译汇编代码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


亲爱滴开发者 ,这个问题已经在处理中啦,稍后答复你哟 ,么么哒

亲爱滴攻城狮,这个问题已经处理完了嘛,现在答复我哟,么么哒

在HarmonyOS鸿蒙Next中,使用较高版本的native工具链时,-fno-integrated-as选项在编译汇编代码时可能会出现兼容性问题。-fno-integrated-as选项通常用于禁用GCC的集成汇编器,强制使用外部汇编器。然而,较新的工具链可能不再支持该选项,或者其行为发生了变化,导致编译失败或生成错误的代码。

具体来说,-fno-integrated-as选项在较新的GCC版本中可能已被弃用或移除,因为现代GCC更倾向于使用其内置的集成汇编器来处理汇编代码。如果代码中显式使用了该选项,可能会导致编译错误或不兼容的情况。

解决此问题的方法通常是移除-fno-integrated-as选项,并确保代码与工具链的默认行为兼容。如果代码依赖于特定的汇编器行为,可能需要调整汇编代码或使用其他编译选项来达到相同的效果。

在HarmonyOS鸿蒙Next中,如果使用较高版本的native工具链,可能会遇到无法兼容-fno-integrated-as选项的问题。这是因为较新的工具链默认使用集成汇编器(integrated assembler),而-fno-integrated-as选项会强制使用外部汇编器,导致兼容性问题。建议检查并更新代码,移除-fno-integrated-as选项,或使用与工具链版本兼容的编译选项。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!