我试图在一个伯克利香料应用程序中使用iOS工具,但在为iOS编译它时遇到了困难。
这是一个命令行程序,我可以从终端调用如下:
./spice3f5 <arguments>它工作得很好,我希望在我的iOS应用程序中使用这个功能,但我不认为我可以直接将可执行文件复制到Xcode中,然后从Swift调用它。
我做了一些研究,发现如下:
我在这里问这个问题的原因是,在谷歌搜索"ngspice iOS“时,我遇到了这条线,它有很多聪明的人试图编译一个静态库,这似乎超出了我的范围。我了解到,动态库在iOS8中是允许的。那么,编译*.dylib比编译静态库容易吗?
我该如何在iOS应用中使用ngspice或SPICE呢?
谢谢
发布于 2017-03-26 20:56:32
静态库和动态库之间的区别本质上是它们所处的位置,静态库将驻留在应用程序的二进制文件中,而动态库将驻留在运行应用程序的系统(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。从那里,我会导入文件,并从斯威夫特打电话给他们。有很多线程可以解释为什么调用c函数或目标-c类,所以我不会在这里讨论这个问题,我将向您介绍另一个答案:Swift:如何调用从dylib加载的C函数。
https://stackoverflow.com/questions/42779779
复制相似问题