A_t*_*ter 11 compilation dylib static-libraries ios
我试图在iOS应用程序中使用Berkeley的SPICE工具,但是在编译iOS时遇到了问题.
这是一个命令行程序,我可以从终端调用,如:
./spice3f5 <arguments>
Run Code Online (Sandbox Code Playgroud)
哪个效果很好,我想在我的iOS应用程序中使用此功能,但我认为我不能将可执行文件复制到Xcode并从Swift调用它.
我做了一些研究,发现了以下内容:
我在这里问的原因是因为在搜索"ngspice iOS"时,我遇到了这个线程,其中有很多聪明的人试图编译静态库,这似乎超出了我的范围.我了解到iOS8允许动态库.那么编译*.dylib会比静态库更容易吗?
我如何在iOS应用程序中使用ngspice或SPICE?
谢谢
静态库和动态库之间的区别本质上在于它们所在的位置,静态库将驻留在应用程序的二进制文件中,而动态库将驻留在运行应用程序的系统(iPhone)上。就难度而言,没有太大区别。例如,如果您想在 os x 上采用动态路线,您可以首先在单独的项目中编译 .dylib 文件。然后将新的 .dylib 文件复制到 /usr/lib 或属于系统路径一部分的类似位置。然后,您需要将知道如何与新的 .dylib 文件通信的关联头文件复制到 /usr/include 文件夹中。此时,您可以使用尖括号在 xcode 中导入所述头文件,如下所示:
#import <my_dylib_header_file.h>
Run Code Online (Sandbox Code Playgroud)
然而,在静态世界中,您只需将 .dylib 文件拖到 xcode 中,然后将关联的头文件复制到源文件夹中,然后使用引号导入,如下所示:
#import "my_dylib_header_file.h"
Run Code Online (Sandbox Code Playgroud)
静态导入的优点是库会融入到最终产品中,而不是动态链接,动态链接需要在二进制文件能够正常运行之前将 dylib 安装在系统上(想想 Windows 上的 DLL) )。静态导入的缺点是最终的二进制文件更大,因为它包含更多代码。
动态导入的优点是二进制文件更小,并且可以更新 dylib 而无需更新二进制文件本身。
然而,根据您的问题,我认为这些对您的项目都不重要。你有源代码。这意味着创建 dylib 对于您的目的来说完全没有必要,您只需将源代码添加到您的 xcode 项目中即可将源代码视为静态库。如果我是你,我会将 Spice 源代码添加到我的 xcode 项目中,而忘记创建 dylib。从那里我将导入文件并从 swift 调用它们。有很多线程解释了如何从 swift 调用 c 函数或 Objective-C 类,所以我不会在这里深入讨论,相反,我将向您推荐另一个答案:Swift: How to call a C function returned from a dylib