繁体   English   中英

我想在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的SPICE工具,但是在编译iOS时遇到了问题。

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

./spice3f5 <arguments>

哪个效果很好,我想在我的iOS应用程序中使用此功能,但我认为我不能将可执行文件复制到Xcode并从Swift调用它。

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

  • SPICE的更新版本名为ngspice ,相对较新(2014年发布)
  • 我很确定那里有应用程序,而不是使用SPICE或ngspice,所以我确信它可以以某种方式完成。
  • 我读过一篇关于一个人说ngspice被编译为共享库 (ctrl + f“ngspice”)的文章,他用它制作了一个应用程序。 我已经给他发了电子邮件,但遗憾的是他还没回复。

我在这里问的原因是因为在搜索“ngspice iOS”时,我遇到了这个线程 ,其中有很多聪明的人试图编译静态库,这似乎超出了我的范围。 我了解到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"

静态导入的优点是库变成了最终产品,而不是动态链接,这需要在二进制能够正常运行之前将dylib安装在系统上(想想在Windows上的DLL) )。 静态导入的缺点是最终二进制文件更大,因为它包含更多代码。

动态导入的优点是二进制文件更小,并且可以更新dylib而无需更新二进制文件本身。

但是根据您的问题,我不认为这对您的项目有任何影响。 你有源代码。 这意味着创建一个dylib对于您的目的来说是完全没有必要的,您可以通过简单地将源代码添加到xcode项目来将源代码视为静态库。 如果我是你,我会将spice源代码添加到我的xcode项目中,忘记创建一个dylib。 从那里我将导入文件并从swift调用它们。 有很多线程可以解释如何从swift中调用c函数或objective-c类,所以我不会在这里讨论,而是我会引用你的另一个答案: Swift:如何调用从dylib加载的C函数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM