3

我正在做一个项目,我需要在 Android 应用程序中包含NGSpice模拟库,并且当然能够使用它。

我尝试使用 SWIG 和 Android NDK 在我的 android 应用程序中包含 NGSpice windows DLL,但结果证明这是不可能的,所以现在我开始考虑将 NGSpice 构建为 linux 的共享库

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

谢谢。

4

1 回答 1

14

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

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

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

如果你构建一个与机器架构和仿生系统库函数和动态链接器兼容的.so,那么它应该是可行的。

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

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

于 2013-10-09T19:12:15.730 回答