2

我一直在研究一个有几个原生 C++ 库的 Android 项目。使用带有 ADT 插件的 Eclipse 编译和调试效果很好。显然,Android NDK 使用某些版本的 arm-linux-gnueabi-gcc 来编译原生库。

由于我一直在大量使用 NEON 内在函数,因此我想尝试使用 ARM 的官方编译器编译本机库armcc。我到处阅读armcc应该在使用内在函数时提供更好优化的代码。所以我从ARM网站下载了DS-5的试用版,只是想试试看是否真的有速度差异。

DS-5 似乎只是使用 ARMCC 工具链的 Eclipse 的修改版本,所以我安装了 ADT 插件。但是当我使用 DS-5 编译时,似乎代码仍然是使用gcc而不是armcc.

您知道如何强制 DS-5 或 Eclipse 使用 构建 Android 本机代码armcc吗?或者是否有可能(以及如何)从命令行构建静态 NDK 库,然后替换我项目中的库,以便将它们部署到测试手机?

4

2 回答 2

2

ARM DS-5 社区版不包括ARM compiler( armcc)。

如果你能掌握armcc最好的方法是将你的处理繁重的算法分离到单独的编译单元(单独的 C 文件),armcc就像你为任何编译单元所做的那样构建它们。当您获取目标文件时,将它们转换为存档,然后在 Android.mk 中将其用作LOCAL_STATIC_LIBRARIES += <your_archive>.

我认为,由于依赖关系,您不能简单地使用armcc构建 Android 兼容库。Bionic

于 2013-06-24T08:55:56.087 回答
0

armcc即使 Android 有不同的 C 库 ( bionic) ,您也可以使用它来构建 Android 兼容的静态库。关键是 的--library_interface标志armcc。根据文档

与符合 ABI 的 C 库链接时,使用形式为 --library_interface=aeabi_* 的选项。--library_interface=aeabi_* 形式的选项确保编译器不会生成对 ARM C 库提供的任何优化函数的调用。

此外,还有一些标志可确保与 Android EABI 的兼容性,从而为 Androidarmeabi-v7a目标生成以下命令:
armcc --library_interface=aeabi_clib --wchar32 --enum_is_int --no_hide_all --cpu=7-A --fpu=softvfp+vfpv3 -c -o libfunc.o libfunc.c

然后,您可以使用armar --create libfunc.a libfunc.o创建一个静态库,该库可以与 Android NDK 链接为LOCAL_STATIC_LIBRARIES.

我已经在 Android KitKat 4.4.2 上使用 Android NDK r10d 成功测试了这一点。

于 2015-11-19T23:11:46.187 回答