使用objective-c框架的Swift项目

时间:2015-12-18 10:08:30

标签: c++ ios objective-c swift

我有一个用objective-c和c ++编写的自定义框架,现在,我尝试在我的swift项目中使用该框架。我想我正确配置了桥接头文件。但在编译项目时仍会遇到这些错误。

enter image description here

2 个答案:

答案 0 :(得分:1)

如果通过pod安装,请确保使用导入类文件中的框架。示例:import Cloudinary。

答案 1 :(得分:0)

由于我们实际上需要一个链接器标志的原因而我们遇到这个问题在下面的this link取得的部分中定义:

  

链接器

     

编译C程序时,每个“源文件”都会变成一个   “对象文件”,包含可执行函数和静态数据。该   链接器将这些目标文件粘合到最终的可执行文件中。那   可执行文件最终被Xcode捆绑到一个应用程序中。

     

当源文件使用另一个中定义的某些内容(如函数)时   文件,然后将未定义的符号写入目标文件中   为了缺少的东西“站起来”。链接器通过解析这些符号   拉入包含undefined定义的目标文件   构建最终可执行文件时的符号。

     

例如,如果main.c使用函数foo(),则定义foo   在另一个文件B.c中,然后目标文件main.o将有一个   foo()的未解析符号,而B.o将包含一个实现   FOO()。在链接时,B.o将被带入最终的可执行文件,所以   main.o中的代码现在引用了foo()的实现   在B.o。中定义。

     

UNIX静态库只是目标文件的集合。一般   如果这样做,链接器只从静态库中提取目标文件   所以会解决一些未定义的符号。没有牵引所有物体   文件减少了最终可执行文件的大小。

     

目标C

     

Objective-C的动态特性使事情略微复杂化。因为   实现方法的代码直到该方法才确定   实际上是调用,Objective-C没有定义链接器符号   方法。链接器符号仅为类定义。

     

例如,如果main.m包含代码[[FooClass alloc]   initWithBar:无];然后main.o将包含一个未定义的符号   FooClass,但-initWithBar:方法没有链接符号   在main.o。

     

由于类别是方法的集合,因此使用类别   方法不会生成未定义的符号。这意味着链接器   不知道加载定义类别的对象文件,如果是   类本身已经定义。这导致相同的“选择器没有   认可“你会看到任何未实现的运行时异常   方法

     

-ObjC链接标记

     

将-ObjC选项传递给链接器会导致它加载所有成员   实现任何Objective-C类或类别的静态库。   这将拾取任何类别方法实现。但它可以做到   结果可执行文件更大,并可能拾取不必要的对象。   因此,默认情况下不启用。

出于同样的原因,当我们必须包含c ++特性时,我们必须为-lc++添加链接器标志(参考this url)。 (AFAIK,如果排除c ++特性,则不需要-lc ++标志)

避免链接器问题的简短程序是添加-all_load(请参阅what does this flag do

这些是我对这个问题的发现,希望有所帮助!