ios - 存在符号定义时出现 "Undefined symbols for architecture"clang 错误(使用静态库)

标签 ios xcode static-libraries clang symbols

我正在开发一个带有演示项目的开源 iOS 静态库。我创建了我的“库”xcodeproj,创建了一个类 DKNavigationBar ,将它包含在我必须包含它的地方。然后我创建了一个“演示”xcodeproj 并将“库”xcodeproj 拖入其中。我将我的静态库包含在“目标依赖项”部分,并使用 #import <MyLibrary/MyLibrary.h> 将我的库导入到 pch 文件中.我构建了演示项目,完全没有错误。然后,在我的 DKDAppDelegate.m我调用[DKNavigationBar class] - LLDB 没有给我任何错误。然后我构建了我的项目并繁荣:

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_DKNavigationBar", referenced from:
      objc-class-ref in DKDAppDelegate.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

乍一看,这似乎是一个正常的错误:“哦,我忘了将我的源文件添加到‘编译源’构建阶段”。但是当我看得越来越深时,我意识到一切都设置正确。经过一些研究,我意识到符号定义存在在我的.a中。文件和静态库是为我的架构构建的:

$ cd /path/to/derived/data/product/folder

$ lipo -info libMyLibrary.a
input file libMyLibrary.a is not a fat file
Non-fat file: libMyLibrary.a is architecture: i386

$ otool -MVv libMyLibrary.a
Archive : libMyLibrary.a
libMyLibrary.a(DKNavigationBar.o):
Module table (0 entries)

$ nm libMyLibrary.a
libMyLibrary.a(DKNavigationBar.o):
00000074 S _OBJC_CLASS_$_DKNavigationBar
         U _OBJC_CLASS_$_UINavigationBar
00000060 S _OBJC_METACLASS_$_DKNavigationBar
         U _OBJC_METACLASS_$_NSObject
         U _OBJC_METACLASS_$_UINavigationBar
         U __objc_empty_cache
         U __objc_empty_vtable
00000038 s l_OBJC_CLASS_RO_$_DKNavigationBar
00000010 s l_OBJC_METACLASS_RO_$_DKNavigationBar

现在我不知道出了什么问题。任何帮助将不胜感激。


长话短说

  1. 我创建了一个静态库项目并正确执行了所有操作
  2. 我创建了一个演示项目,将库项目拖入其中并将我的库包含在“目标依赖项”中,并且一切正常
  3. Xcode 识别头文件并且实时调试器没有给我任何错误。
  4. 构建时,undefined symbols for architecture clang 错误弹出
  5. 我检查了我构建的 libMyLibrary.a 文件,发现我的符号定义在那里

最佳答案

在构建阶段的“Link Binary With Libraries”下添加库。

关于ios - 存在符号定义时出现 "Undefined symbols for architecture"clang 错误(使用静态库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17706139/

相关文章:

ios - 使用 SetFrame 时非视网膜形式的 CGRect 坐标

ios - 具有一对多关系的 NSPredicate

c++ - 在另一个库中链接一个库,仍然必须在最终项目中链接它

linker - 如何在 D 中使用 C 静态库?

opencv - Linux上的OpenCV编译:如何向其提供特定的zlib lib?

ios - Web View 加载 URL - 文本未换行

iphone - 我如何获取短信/电话事件,并在将它们发送到系统应用程序之前对其采取行动?

iphone - touchesBegan 和 touchesMoved

swift - 如何在 Mac OS Swift 应用程序中重新获得/设置焦点

ios - Swift:基于奇数项或偶数项的 2 列网格中的 UICollectionView 动态单元格大小