Android 什么是独立的工具链?

Android 什么是独立的工具链?,android,toolchain,android-ndk-r5,Android,Toolchain,Android Ndk R5,我试图理解一个独立的工具链意味着什么。 以下是我的发现。 一个工具链,可以与所有配置一起使用,即系统头和库位于正确的路径中。对于Android,工具链可以在路径中查找API头。为什么要使用“独立”一词?这可能不同于常规的工具链,因为RT需要配置并准备好供android使用,并提供了sysroot和libc头路径等。 请评论 嗯,我是为android编译的,其中一个进程运行了一个名为make-standalone-toolchain.sh的脚本。创建了一个独立的工具链。我通过这个脚本来了解它在做什

我试图理解一个独立的工具链意味着什么。 以下是我的发现。 一个工具链,可以与所有配置一起使用,即系统头和库位于正确的路径中。对于Android,工具链可以在路径中查找API头。为什么要使用“独立”一词?这可能不同于常规的工具链,因为RT需要配置并准备好供android使用,并提供了sysroot和libc头路径等。 请评论

嗯,我是为android编译的,其中一个进程运行了一个名为make-standalone-toolchain.sh的脚本。创建了一个独立的工具链。我通过这个脚本来了解它在做什么。不太擅长编写shell脚本。但我明白了一些事情。“”生成一个自定义的Android工具链安装,其中包括一个工作的sysroot。结果是可以更容易地用作独立的交叉编译器,例如运行配置和生成脚本。”——工具链arch ndk dir package dir系统平台变量设置为计算源sysroot SRC_SYSROOT=“$NDK_DIR/platforms/$PLATFORM arch-$arch”复制SYSROOT头文件和库文件…libstdc++头文件和库文件…预编译的二进制文件。所有这些文件都保存到一个临时文件夹中,然后从Tmp DIR复制以进行安装 dir创建一个tar即一个包文件来添加tmpdir想要知道这里到底发生了什么,或者一个链接或建议在哪里查找。但是当然,我们不想阅读非常详细的手册。
~

此博客帖子可能会回答您的问题:

有一种在Android上构建本机C/C++程序的推荐方法:在脚本(Android.mk)中列出源文件并运行“ndk build”。如果您正在编写新程序,但您已经有了一个可用的构建脚本(如那些开源软件),这可能不是问题它可以很好地在Linux上构建程序,将脚本迁移到Android.mk将是一件令人头痛的事情。在这种情况下,您只需要一个C/C++交叉编译器,然后将脚本中的变量(如CC、CXX、AR、as、RANLIB等)替换为类似“arm-Linux AndroidABI gcc”、“arm-Linux-AndroidABI-g++”之类的内容


Fortunaley,在“Android NDK开发指南”中,有一节“独立工具链”,它只描述了我们需要什么….

首先,Android中独立工具链的最佳指南在这里:。 我已经在不同的设备和平台上使用过多次

您需要下载NDK,然后运行脚本“make standalone toolchain.sh”,其中包含一些参数(如上面的链接所述),这些参数将决定应用程序的API级别、设备的体系结构等

脚本的输出将是一个目录,您可以将其用作工具链,以便交叉编译本机C/C++代码以在Android设备上运行。您需要在Makefile中输入工具链目录的路径,并为其中的二进制文件添加架构后缀(例如“arm eabi-”)。类似于:

CROSS_COMPILE = /path-to-toolchain-dir/bin/arm-eabi-
在您的工具链目录中应该有类似“/path to toolchain dir/bin/arm eabi gcc”的文件

无论如何,这将告诉Makefile使用工具链的二进制文件来编译C/C++本机代码,并为目标机器创建兼容的可执行文件

例如,这是我用来为特定Android设备创建独立工具链的命令:

./make-standalone-toolchain.shj --arch=arm --platform=android-21 --install-dir=<dest-dir> --toolchain=arm-linux-androideabi-4.9
/make-standalone-toolchain.shj--arch=arm--platform=android-21--install dir=--toolchain=arm-linux-androideabi-4.9

请提供一些信息,说明您尝试了什么,您的目标是什么,目前的问题似乎很广泛。这个答案有一个很好的例子,说明了如何使用它: