我有一个静态C库ohNetCoreFatEntotem.a,并将其导入到最初用ObjctiveC编写的现有项目中。现在该项目几乎是Swift。
当我尝试构建项目时,出现以下错误:
该库是为arm64,armv7和x86编译的胖库
此错误是什么意思?
谢谢
已编辑 我可能对编译器和库没有足够的深入了解。抱歉。
我已经从https://github.com/openhome/ohNet构建了一个库,并且生成了压缩文件,就像您可以找到Here一样。
结构为:
我创建了一个Fat库,其中包含来自Here的不同结构的所有fileLib.a。
如何在xcode中声明它们?
答案 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项目中。
从问题中定义的最后一个文件夹结构开始:
如问题的最后一张图片所示,定义.a的根文件夹也有一个include文件夹。 .hpp中声明的标头就是这些标头。取决于您如何解决第1点,路径可能会有所不同。
我希望它会有所帮助。