一尘不染

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

linux

我正在一个项目中,我需要在Android应用程序中包括NGSpice仿真库,并且当然可以使用它。

我尝试使用SWIG和Android NDK将NGSpice Windows
DLL包含在我的android应用程序中,但事实证明这甚至是不可能的,因此现在我开始考虑将NGSpice构建为linux共享库

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

谢谢。


阅读 363

收藏
2020-06-07

共1个答案

一尘不染

不会。Android通常与传统linux有两个主要区别:

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

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

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

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

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

2020-06-07