3

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

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

谢谢。

4

2 回答 2

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 语言标准?为了真正可移植,代码必须以这种方式设计和编写。

于 2013-10-08T19:43:40.777 回答
5

不。如果没有构建整个 Windows 兼容层,则不会。Android 与 Windows 开箱即用不兼容。

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

于 2013-10-08T19:37:46.303 回答