在obj c – ios中使用C Dll和lib

我有一个Windows应用程序的C库和DLL文件。 没有与我的源代码。 有没有可能在iOS应用程序中使用它。

我看到了不同的反应,感到困惑。 如果我们有源代码,我认为我们需要创builddylib,然后在包含相关头文件后使用相同的代码。

请分享任何专家意见,指导我正确的方向。 感谢你的帮助 。

  • MIA

iOS上不允许使用dynamic库,但在此之上,Darwin或底层的XNU内核根本无法识别DLL文件格式,因为二进制格式不同。

Windows API在Darwin操作系统上不可用(Mac OS X和iOS都是基本的Darwin操作系统的包装)。 您将需要重写DLL中的代码以使用POSIX和/或Objective-C API,并将其编译为静态库以使用它。

你需要得到一个iOS兼容的库,没有别的办法。 有几个原因:

  • iOS不支持DLL,因为它们是Windows格式的,而且,您不能在iOS上使用任何dynamic库,因为Apple会限制它。
  • DLL通常用于英特尔CPU,而iOS设备则用ARM CPU。
  • 大多数dll都在调用windows API – 你确定这个不是?

不,如果你只有一个编译的二进制DLL,那么在iOS上就没有办法使用它。 除非你碰巧有一个用于即将到来的Windows 8的ARM DLL,否则你的DLL包含x86或者x86-64机器代码(或者如果你有很多钱的话可能是IA64),这绝对不会在iOS设备上运行,这些都是ARM架构。 还有更多的原因。

如果您有源代码,则可以将其重新编译为iOS版本,可以直接将其编译到应用程序中,也可以将其作为可与应用程序链接的静态库,也可以作为框架的一部分作为dynamic库。 但在任何情况下,您都需要使用iOS编译器从源代码重新编译它。

您将不得不重新编译为一个静态库(.a文件)。 苹果公司不允许dynamic库,除了他们自己的框架(所以你不能编译为一个dylib)。