Android NDK可以在Android共享库中包含一个Windows dll吗?

موس*_*اور 2 c java dll android android-ndk

甚至可以在ndk-build命令中链接/包含一个dll文件,并生成一个可以从android java代码访问dll函数的共享库.

我一直在尝试这样做,我尝试使用SWIG创建一个java包装器代码到dll而我没有成功,然后我开始认为它甚至可能!

谢谢.

Sev*_*yev 5

不.不是没有构建整个Windows兼容性层.Android与开箱即用的Windows不兼容.

此外,Windows DLL往往是针对Intel x86 CPU编译的,而大多数Android设备都有ARM CPU.虽然存在Windows for ARM(Windows Phone,Windows RT等),但Android上不存在DLL应该存在的环境.


cda*_*rke 5

不可以.Windows DLL的格式与Android和Linux不同.

Windows使用称为PE COFF的格式:"可移植可执行文件,通用对象文件格式".虽然COFF本身来自UNIX,但微软有自己的版本.存在进一步的不兼容性以支持.Net对象.大多数UNIX和Linux使用ELF - 执行和链接格式.

即使它们是奇迹般地使用相同的格式,它仍然可能无法工作,因为机器架构必须是相同的,例如ARM(以及ARM的几种配置)或Intel x86.

而且还有更多.即使你设法让DLL运行,它还有什么用?DLL通常具有其他外部依赖项,例如C运行时库,MSVCRT或kernel.dll.

那么,获取源代码并原生重新编译它?这可能有用,但Windows DLL有时会有一个可选的DLLMain()入口点,Linux .so文件没有直接的等价物.那剩下的代码怎么样?它是以便携方式编写的吗?它是否始终坚持使用ISO语言标准?要真正可移植,必须以这种方式设计和编写代码.