【问题标题】:$non_lazy_ptr link error with agvtool version variables?$non_lazy_ptr 与 agvtool 版本变量的链接错误?
【发布时间】:2010-07-31 02:30:42
【问题描述】:

我一直在使用agvtool 作为我的一个 iPhone 应用程序的一般原则,并且最近找到了我希望能够检查版本变量的原因(以便我可以将帮助内容重新复制到文档目录,如果它已过时)。在 MyApp_vers.c 中定义的变量 MyAppVersionNumber 在构建期间自动生成。它在 .o 文件中生成,并显示在链接应用程序本身的(以前的版本?)中。到目前为止一切顺利,看起来。

所以现在我在.m 文件中声明了一个extern double MyAppVersionNumber,我需要在其中使用它(稍后尝试使用它,只是在NSLog 语句中开始使用),然后我尝试构建对于 iPhone 模拟器,并得到一个链接错误:

  "_MyAppVersionNumber", referenced from:
      _MyAppVersionNumber$non_lazy_ptr in HelpViewController.o
     (maybe you meant: _MyAppVersionNumber$non_lazy_ptr)
ld: symbol(s) not found
collect2: ld returned 1 exit status

那么,我需要做些什么不同的事情来获得链接?

我在 Google 上搜索了 $non_lazy_ptr 和 agvtool,但一无所获,只找到了 $non_lazy_ptr,它提供了一些东西,但主要应用于库,这不是,真的(是吗?)。到目前为止,在我的挖掘中,我还没有打开一个关于 agvtool 的页面,它实际上详细讨论了关于使用变量的任何细节——我读过的那些只是随便说要声明一个外部变量,我已经完成了.

任何熟悉这个和/或能够提供任何帮助的人?

谢谢!

【问题讨论】:

  • 嗯...一直在做更多的谷歌搜索,并尝试不同的事情,我发现:如果我将 extern 语句和引用都放入main.m,它工作正常。但是,在我的视图控制器类中使用它无法正常工作......通过类访问外部变量是否存在问题(由@interface@implementation 定义)?我已经尝试将它放在@interface 中,它以error: expected specifier-qualifier-list before 'extern' 失败,并在我的.h.m 的其他各个地方(再次$non_lazy_ptr 链接错误)。我如何通过我的班级获得访问权限?
  • 注意:我找到了解决我最初问题的方法(包括确保我的帮助查看器查看最新内容):不要将其复制到文档(它是只读的,因此不需要)。不过,很高兴知道发生了什么,以防我出于其他原因需要这个变量。
  • 对不起,我无法理解你的问题,删除了答案。
  • 嘿,不用担心。感谢您的反馈。 :)

标签: iphone xcode linker-errors non-lazy-ptr agvtool


【解决方案1】:

由于 agvtool 会更新您的 plist 的 CFBundleVersion 值,我建议在运行时访问版本号:

NSDictionary *mainDictionary = [[NSBundle mainBundle] infoDictionary];
double myVersionNumber = [(NSString *)[infoDictionary objectForKey:@"CFBundleVersion"] doubleValue];

【讨论】:

    猜你喜欢
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    相关资源
    最近更新 更多