12

我试图了解独立工具链的含义。以下是我的发现。一个工具链,可以与正确路径中的系统头文件和库的所有配置一起使用。对于 Android,它还将在工具链可以查找的路径中包含 API 标头。为什么叫“独立”?这可能与常规工具链不同,因为 RT 需要配置并准备好用于 android 使用给定的 sysroot 和 libc 标头路径等。请评论。

嗯,我正在为 android 编译,一个进程正在运行一个名为 make-standalone-toolchain.sh 的脚本,创建了一个独立的工具链。我正在通过这个脚本来了解它在做什么。不太擅长shell脚本。但是弄出来了一些东西。""生成一个定制的 Android 工具链安装,其中包括一个工作的 sysroot。结果是可以更容易地用作独立的交叉编译器,例如运行配置和制作脚本。" --toolchain arch ndk-dir package-dir 系统平台变量已设置 Compute source sysroot SRC_SYSROOT="$NDK_DIR/平台/$PLATFORM arch-$ARCH" 正在复制 sysroot 头文件和库... libstdc++ 头文件和库... 预构建的 binaries.all 到一个临时文件夹然后从 Tmp 目录复制到安装目录创建一个 tar 即一个包文件来添加 tmpdir 想知道这里到底发生了什么或链接或建议在哪里看。但当然不想阅读非常详尽的手册。~

4

2 回答 2

7

这篇博文可能会回答您的问题:

http://clseto.mysinablog.com/index.php?op=ViewArticle&articleId=3480794

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

Fortunatley,在“Android NDK 开发指南”中,有一个“独立工具链”部分,它只是描述了我们需要什么......

于 2013-05-02T21:16:01.593 回答
0

首先,Android 中独立工具链的最佳指南在这里:https ://developer.android.com/ndk/guides/standalone_toolchain 。我已经多次将它用于不同的设备和平台。

您需要下载 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
于 2018-08-28T12:54:10.863 回答