另一个Xcode项目中未定义的符号

时间:2013-03-28 05:23:09

标签: iphone ios objective-c xcode

我昨天在这里问了一个关于HOWTO debug in a framework的问题。

我有一个networkLib和一个usingLibDemo项目。

答案建议我将networkLib拉入usingLibDemo,以便我可以在源代码中进行调试。

现在我试过了:

  1. networkLib输出框架,并使用框架 usingLibDemo。它有效。
  2. networkLib的所有源代码复制到usingLibDemo中 再次工作。
  3. networkLib项目拖到usingLibDemo项目中,设置 Header Search Paths中的Build Settings并在Target Dependencies中设置Build Phases。它失败了。
  4. 在#3情况下,仅在使用标头时才能成功构建项目。例如,我只使用协议:

    @interface ViewController : UIViewController <LoginUIDelegate>
    
    @property (retain, nonatomic) IBOutlet UITextField *usernameText;
    @property (retain, nonatomic) IBOutlet UITextField *passwordText;
    @property (retain, nonatomic) IBOutlet UIButton *loginButton;
    
    - (IBAction)loginBtnDidClick:(id)sender;
    
    @end
    

    但是当我使用.m文件中的代码时:

    [[LoginBizLogic sharedInstance] loginWithUsername:username password:password tokenLogin:NO uiDelegate:self];
    

    构建失败如下:

    enter image description here

    LoginBizLogic的@interface以及LoginUIDelegateLoginBizLogic.h文件中定义,但@implementation位于“LoginBizLogic.m”文件中。

    我认为LoginBizLogic没有正确链接,与其他类相同,但我无法弄清楚问题出在哪里,或者在哪里配置。

    非常感谢。

2 个答案:

答案 0 :(得分:2)

阅读本Undefined symbols for architecture i386: _OBJC_CLASS_$_SKPSMTPMessage", referenced from: error

的答案
  

如果您的类'.m文件未列在目标“构建阶段”选项卡的“编译源”步骤下,则可能会出现此类错误。通常Xcode会为您执行此操作,但有时会丢失绘图,您需要手动添加.m文件。

在您的情况下:

TargetSettings -> Build Phases -> Compile Sources -> add your .m file  ->Build and Run 

答案 1 :(得分:0)

谢谢你,@ iPatel

从你的回答中我知道问题所在:

enter image description here

以及如何显式编译导入的文件,但networkLib有太多文件无法选择:

enter image description here

选择135个项目很烦人,我设置了依赖项:

enter image description here

enter image description here

所以我认为在编译usingLibDemo之前,已经编译了networkLib

它是编译的,为什么找不到符号? -------&GT;没联系!我导入了用于链接的库:

enter image description here

就是这样!再次感谢。