我一直在做一个Android项目,它有几个原生C++库。使用带有ADT插件的Eclipse编译和调试效果很好。显然,Android NDK使用了某个版本的arm-linux-gnueabi-gnueabi来编译本机库。
由于我一直在大量使用霓虹灯内部函数,所以我想尝试使用ARM的官方编译器armcc来编译本地库。我到处读到,armcc应该在使用内部函数时提供更好的优化代码。所以我从ARM网站上下载了DS-5的试用版,只是想看看是否真的有速度上的差异。
DS-5似乎只是Eclipse的一个修改版本,它使用了ARMCC工具链,所以我安装了ADT插件。但是当我使用DS-5进行编译时,似乎仍然使用gcc而不是armcc生成代码。
您知道如何强制DS-5或Eclipse使用armcc构建Android原生代码吗?或者,是否可以(以及如何)从命令行构建静态NDK库,然后替换项目中的库,以便将它们部署到测试电话上?
发布于 2013-06-24 16:55:56
ARM DS-5 Community Edition不包括ARM compiler (armcc)。
如果你能得到armcc最好的方法就是将你的繁重的算法分离到单独的编译单元(独立的C文件),用armcc构建它们,就像你对任何编译单元所做的那样。当您获得目标文件时,convert them into an archive然后在Android.mk中将其用作LOCAL_STATIC_LIBRARIES += <your_archive>。
我认为,由于Bionic的依赖性,你不能简单地使用armcc来构建与安卓兼容的库。
发布于 2015-11-20 07:11:46
即使安卓有一个不同的C库(bionic),你也可以使用armcc来构建与安卓兼容的静态库。关键是armcc的--library_interface标志。根据the documentation的说法
在链接与ABI兼容的C库时,使用-- library _interface=aeabi_*形式的选项。-- library _interface=aeabi_*形式的选项确保编译器不会生成对ARM C库提供的任何优化函数的调用。
此外,还有几个标志可以确保与Android EABI的兼容性,从而为Android armeabi-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创建一个静态库,该库可以作为LOCAL_STATIC_LIBRARIES与Android NDK链接。
我已经在Android KitKat 4.4.2上用Android NDK r10d成功地测试了这一点。
https://stackoverflow.com/questions/17262824
复制相似问题