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

موس*_*اور 2 linux android android-ndk

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

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

现在我的问题是,我可以在我的Android应用程序中使用NGSpice的linux共享库,还是需要以某种方式构建不同的方式来处理我的Android应用程序.

谢谢.

Chr*_*ton 11

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

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

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

如果你构建一个与机器的体系结构兼容的.so,并且使用bionic的系统库函数和动态链接器,那么它应该是可行的.

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

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