是否可以在Android应用程序中包含/链接并使用为Linux构建的共享库(.so)文件?

时间:2013-10-09 19:00:33

标签: android linux android-ndk

我正在开发一个项目,我需要在Android应用程序中包含NGSpice 模拟库,当然也可以使用它。

我尝试使用SWIG和Android NDK在我的Android应用程序中包含NGSpice windows DLL,但事实证明它甚至不可能,所以现在我开始考虑将NGSpice构建为shared library for linux

现在我的问题是,我可以在我的Android应用程序中使用NGSpice的linux共享库,还是需要以不同的方式构建以在我的Android应用程序上工作。

感谢。

1 个答案:

答案 0 :(得分:11)

没有。 Android通常与传统的Linux有两个主要区别:

1)它使用Bionic C库和动态链接器,而不是更传统的集合,如glibc。

2)Android通常在ARM或32位x86处理器上运行(或者在极少数情况下是MIPS),而桌面Linux库可能是64位或32位x86代码。

如果您构建的.so与机器的体系结构以及bionic的系统库函数和动态链接器兼容,那么它应该是可行的。

或者,如果您有兼容的体系结构但是有错误的libc,则可以编写自己的加载器以便在安全设备上以工作形式将其放入内存,或者在有根设备上运行它可以运行chroot中更传统的linux用户空间(通常是Debian派生的)。但是这些都不容易集成到Android应用程序中 - 对于后者,你几乎肯定必须通过进程间通信来完成工作,并且在前一种情况下也可能更容易。

您唯一真正认可的解决方案是使用ndk构建系统或ndk生成的“独立工具链”和库的当前构建系统从源重建库。