Swift Project中带有.a Library Xcode的体系结构arm64的未定义符号

时间:2018-06-21 10:52:47

标签: objective-c c swift xcode

我有一个静态C库ohNetCoreFatEntotem.a,并将其导入到最初用ObjctiveC编写的现有项目中。现在该项目几乎是Swift。

当我尝试构建项目时,出现以下错误:

enter image description here

该库是为arm64,armv7和x86编译的胖库

此错误是什么意思?

谢谢

已编辑 我可能对编译器和库没有足够的深入了解。抱歉。

我已经从https://github.com/openhome/ohNet构建了一个库,并且生成了压缩文件,就像您可以找到Here一样。

结构为:

enter image description here

我创建了一个Fat库,其中包含来自Here的不同结构的所有fileLib.a。

我创建了一个包含fat库和标头的文件夹。 enter image description here

如何在xcode中声明它们?

3 个答案:

答案 0 :(得分:2)

以__cxa_开头的符号是c ++运行时的一部分。

例如libcxxabi.llvm.org/spec.html谈到__cxa_guard_abort:“如果初始化因引发异常而终止,则调用此函数。”

如果使用c ++编译器链接c ++运行时,它将自动链接到您的程序中。另一方面,如果直接使用ld,cc,obj-c或其他语言编译器链接目标文件,则必需的C ++运行时库不会添加到链接器调用中。

如果从多种语言链接目标文件,则必须注意包括所有必需的语言运行时支持,这可能会变得很复杂。否则,请始终使用用于编译目标文件的编译器在以后链接它们。

答案 1 :(得分:1)

摘录自 HERE ,下面以摘要形式显示了两个主要主题(可能与您所看到的内容相关)。请转到链接页面以获取有关该主题的更多详细信息。 (Embarcadero是特定于Borland的,但本教程中的许多信息通常都适用)

  

编译时未定义的符号
          编译时未定义的符号表示           在命名源文件中使用了命名标识符,但是具有           源文件中没有定义。这通常是由于           标识符名称拼写错误或缺少声明           使用的标识符。 ( examples follow

  

链接时未定义的符号
          链接多文件项目时,链接器必须解析           共享所有对函数和全局变量的引用           模块之间。当这些引用无法解析时,           链接器生成“未定义符号”错误消息。           这意味着在搜索所有目标文件后,           链接中包含的库,链接器为           无法找到您所使用的标识符的声明           使用。这可能是由于...( read more...

答案 2 :(得分:0)

我想我已经解决了这个问题。 注意:此解决方案用于将.a Fat或非Library导入到swift项目中。

从问题中定义的最后一个文件夹结构开始:

  1. 点击以下链接:Here
  2. 在xcode中创建一个C ++文件,并确保已选中“创建标题”
  3. 创建桥接头并导入.hpp头
  4. 在.hpp文件中,导入标题。

如问题的最后一张图片所示,定义.a的根文件夹也有一个include文件夹。 .hpp中声明的标头就是这些标头。取决于您如何解决第1点,路径可能会有所不同。

我希望它会有所帮助。