首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ARMCC编译Android本机库

使用ARMCC编译Android本机库
EN

Stack Overflow用户
提问于 2013-06-24 00:27:17
回答 2查看 1.3K关注 0票数 2

我一直在做一个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库,然后替换项目中的库,以便将它们部署到测试电话上?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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来构建与安卓兼容的库。

票数 2
EN

Stack Overflow用户

发布于 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成功地测试了这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17262824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档