我想在 iOS 应用程序中使用 UNIX 命令行程序 (Berkeleys SPICE)。将其编译成可用库的过程是什么?

I would like to use a UNIX command-line program (Berkeleys SPICE) in an iOS app. What is the process to compile it into a usable library?

我正在尝试在 iOS 应用程序中使用 Berkeley's SPICE 工具,但在为 iOS.

编译它时遇到问题

这是一个命令行程序,我可以从这样的终端调用:

./spice3f5 <arguments>

效果很好,我想在我的 iOS 应用程序中使用此功能,但我不认为我可以将可执行文件复制到 Xcode 并从 [=50] 调用它=].

我做了一些研究并发现了以下内容:

我在这里问的原因是因为在谷歌搜索 "ngspice iOS" 时,我遇到了 this thread,其中有很多聪明人试图编译一个 static 库,这似乎超出了我的范围。我了解到 dynamic 库从 iOS8 开始是允许的。那么编译 *.dylib 会比编译静态库更容易吗?

我将如何在 iOS 应用程序中使用 ngspice 或 SPICE?

谢谢

静态库和动态库之间的区别本质上在于它们存在的位置,静态库将存在于您应用程序的二进制文件中,而动态库将存在于系统 (iPhone) 中 运行是您的应用程序。就难度而言,没有太大区别。例如,如果您想在 os x 上使用动态路由,您可以先在单独的项目中编译一个 .dylib 文件。然后将新的 .dylib 文件复制到 /usr/lib 或属于系统路径一部分的类似位置。然后,您需要将知道如何与新 .dylib 文件通信的相关头文件复制到 /usr/include 文件夹中。此时,您可以使用尖括号在 xcode 中导入所述头文件,如下所示:

#import <my_dylib_header_file.h>

然而,在静态世界中,您只需将 .dylib 文件拖到 xcode 中,然后将关联的头文件复制到源文件夹中,然后使用引号导入,如下所示:

#import "my_dylib_header_file.h"

静态导入的优点是库会融入您的最终产品,因为 opposed 到动态 link,这将需要将 dylib 安装在二进制文件能够正确 运行 之前的系统(想想 windows 上的 DLL)。静态导入的缺点是最终二进制文件更大,因为它包含更多代码。

动态导入的优点是二进制文件更小,并且可以在不更新二进制文件本身的情况下更新dylib。

但是根据您的问题,我认为这对您的项目没有任何影响。你有源代码。这意味着您的 purpose 完全不需要创建 dylib,只需将源代码添加到您的 xcode 项目中,您就可以像对待静态库一样对待源代码。如果我是你,我会把 spice 源代码添加到我的 xcode 项目中,而忘记创建 dylib。从那里我将导入文件并从 swift 调用它们。那里有很多线程解释了如何从 swift 调用 c 函数或 objective-c 类 所以我不会在这里讨论,而是让你参考另一个答案: