我想在 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 的 SPICE 更新版本,它相对较新(2014 版)
- 我敢肯定,除了使用 SPICE 或 ngspice 的应用程序之外,还有其他应用程序,所以我确信它可以以某种方式完成。
- 我读过一篇文章,关于一个人说 ngspice has been compiled as a shared library(ctrl+f "ngspice"),他用它制作了一个应用程序。我已经给他发了邮件,但不幸的是他没有回复。
我在这里问的原因是因为在谷歌搜索 "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 类 所以我不会在这里讨论,而是让你参考另一个答案:
我正在尝试在 iOS 应用程序中使用 Berkeley's SPICE 工具,但在为 iOS.
编译它时遇到问题这是一个命令行程序,我可以从这样的终端调用:
./spice3f5 <arguments>
效果很好,我想在我的 iOS 应用程序中使用此功能,但我不认为我可以将可执行文件复制到 Xcode 并从 [=50] 调用它=].
我做了一些研究并发现了以下内容:
- 有一个名为 ngspice 的 SPICE 更新版本,它相对较新(2014 版)
- 我敢肯定,除了使用 SPICE 或 ngspice 的应用程序之外,还有其他应用程序,所以我确信它可以以某种方式完成。
- 我读过一篇文章,关于一个人说 ngspice has been compiled as a shared library(ctrl+f "ngspice"),他用它制作了一个应用程序。我已经给他发了邮件,但不幸的是他没有回复。
我在这里问的原因是因为在谷歌搜索 "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 类 所以我不会在这里讨论,而是让你参考另一个答案: