“存在体系结构的未定义符号”铛错误(使用符号库时,使用符号库)

问题描述 投票:0回答:1

我正在通过一个演示项目开发一个开源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

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


TL; DR

  1. 我创建了一个静态库项目并正确执行了所有操作
  2. 我创建了一个演示项目,将库项目拖到其中,并将我的库包含在“ Target Dependencies”中,并正确完成了所有操作
  3. Xcode可以识别头文件,并且实时调试器不会给我任何错误。
  4. 构建时,会弹出undefined symbols for architecture铛错误
  5. 我检查了构建的libMyLibrary.a文件,发现我的符号定义存在
ios xcode static-libraries clang symbols
1个回答
3
投票

在构建阶段将库添加到“链接二进制文件和库”下。

© www.soinside.com 2019 - 2024. All rights reserved.