在Android NDK工具链中使用LLVM有什么用?

在Android NDK工具链中使用LLVM有什么用?,第1张

概述在AndroidNDK工具链中使用LLVM有什么用?一点回顾:我在Ubuntu上使用Gradlew构建我的本机项目,目标是arm和x86_64架构.似乎LLVM被用来调用arm-linux-androideabi-4.9的c/C编译器以及x86_64(?)以下内容摘自armeabi-v7a/ndkBuild_build_output.log:/home/mypc/Android/android-n

在Android NDK工具链中使用LLVM有什么用?

一点回顾:

我在Ubuntu上使用Gradlew构建我的本机项目,目标是arm和x86_64架构.似乎LLVM被用来调用arm-linux-androIDeabi-4.9的c / C编译器以及x86_64(?)

以下内容摘自armeabi-v7a / ndkBuild_build_output.log:

/home/mypc/AndroID/androID-ndk-r17c/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++
-MMD -MP -MF /home/mypc/git/androID-project-1/build/intermediates/ndkBuild/deBUG/obj/local/armeabi-v7a/obJs-deBUG/module-5/stream_cpp.o.d
-gcc-toolchain /home/mypc/AndroID/androID-ndk-r17c/toolchains/arm-linux-androIDeabi-4.9/prebuilt/linux-x86_64
-fpic -ffunction-sections -funwind-tables -fstack-protector-strong -Wno-invalID-command-line-argument …

..以下是从x86_64 / ndkBuild_build_output.log中提取的:

/home/mypc/AndroID/androID-ndk-r17c/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++
-MMD -MP -MF /home/mypc/git/androID-project-1/build/intermediates/ndkBuild/deBUG/obj/local/x86_64/obJs-deBUG/module-5/stream_cpp.o.d
-gcc-toolchain /home/mypc/AndroID/androID-ndk-r17c/toolchains/x86_64-4.9/prebuilt/linux-x86_64
-target x86_64-none-linux-androID -ffunction-sections -funwind-tables -fstack-protector-strong -fPIC -Wno-invalID-command-line-argument …

>“……”表示这个单行命令的长尾我已经被删除了.
>个人文件夹名称&项目改变了.

让我们来看看AndroID NDK的工具链文件夹中的内容:

myacc:~/.../androID-ndk-r17c/toolchains$tree -L 1.├── aarch64-linux-androID-4.9├── arm-linux-androIDeabi-4.9├── llvm├── mips64el-linux-androID-4.9├── mipsel-linux-androID-4.9├── NOTICE-MIPS├── NOTICE-MIPS64├── renderscript├── x86-4.9└── x86_64-4.9

这让我很困惑.我认为llvm是一种工具链,因为它放在这里,旁边是其他工具链.再次,在AndroID NDK工具链中实际使用LLVM是什么?

谢谢您的帮助 :)

解决方法:

LLVM是编译器(后端).使用的编译器是Clang,它位于llvm目录中. (LLVM是Clang组件的名称,用于执行实际的代码生成,即后端.)

以前,NDK使用GCC作为编译器.使用GCC,每个目标体系结构(arm,aarch64,x86等)都有一个单独的GCC副本,该副本是使用配置的单个目标构建的.另一方面,Clang / LLVM可以使用单个编译器可执行文件来定位任何已配置的体系结构.因此,使用Clang,您将节省一些磁盘空间,避免使用许多单独的编译器可执行文件.这就是为什么llvm目录树只有一个副本.

在NDK r17中,您可以使用GCC和Clang编译器;默认情况下使用Clang,但GCC仍可用于尚未能使用Clang迁移的项目.在较新的NDK版本中,旧的GCC被删除.

在较新的NDK版本中,即使删除了GCC,仍然会保留像aarch64-linux-androID-4.9这样的体系结构特定目录,因为GNU binutils(构建过程使用的小工具)仍在使用,而且那些也来了每个体系结构一个副本(即使它们在技术上可能跨架构工作).

至于为何建造例如手臂也提到了x86_64;当您运行Clang或GCC时,您正在为运行x86_64的构建计算机运行可执行文件,因此预构建的/ linux-x86_64部分路径.

总结

以上是内存溢出为你收集整理的在Android NDK工具链中使用LLVM有什么用?全部内容,希望文章能够帮你解决在Android NDK工具链中使用LLVM有什么用?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1097764.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存