【问题标题】:Linker error (only simulator) with own library after update to iPhone SDK 4.0更新到 iPhone SDK 4.0 后,链接器错误(仅模拟器)与自己的库
【发布时间】:2011-03-09 14:26:40
【问题描述】:

我最近更新到 iPhone SDK 4.0 并且不再能够为 iPhone 模拟器构建我的项目。问题是 ld 无法再找到我自己的一个库的类:

"_OBJC_CLASS_$_Book", referenced from:
   objc-class-ref-to-Book in Category.o
   (maybe you meant: ...)
ld: symbol(s) not found
collect2: ld returned 1 exit status

我已经阅读了一些关于类似问题的其他帖子,例如here。 “不幸的是”,我的问题与SDK框架无关,而是与我自己的lib有关,因此这里提到的解决方案不适用。

该库包含在我的目标的“Link Binary With Libraries”下,库搜索路径是正确的(使用 XCode 和直接在我的项目文件中使用纯文本编辑器进行检查)并正确添加到 gcc 命令中。

我使用 iPhone Simulator 3.2 作为基础 SDK,但 SDK 4.0 也会出现同样的问题。同样,这适用于我的设备目标,但不适用于我的模拟器目标。不过,在我从 iPhone SDK 3.2 更新到 4.0 之前,它两者都适用。通过创建一个只有一个文件和链接库的新项目,我还能够重现此错误。但是,在我更新 XCode 和我的 SDK 之前,该库应该可以与模拟器 3.2 一起使用。

更多信息:Mac OS X 10.6.3、XCode 3.2.3 64 位、iPhone OS 3.2、GCC 4.2

任何帮助将不胜感激。


编辑:

重新安装 SDK 3.2 后,一切都再次按预期运行。必须注意,文件夹 /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs 中的 SDK 会被每次安装覆盖。然后我再次尝试重新安装 SDK 4.0 并出现与上述相同的错误。我没有在我的项目中进行任何更改,并且始终使用 3.2 作为 Base SDK。

因此,问题可能会缩小到以下选项:

  • 苹果改变了某事。在导致问题的 Simulator SDK 3.2 中
  • XCode 3.2.3 中的更改会导致问题
  • 在构建我自己的库时编译器标志错误/缺失(但是,这些标志只会导致更改 SDK 或更改 IDE 时出现问题)

我还在 /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.2.sdk 上为这个文件夹的旧版本和新版本做了一个文件夹差异。事实证明,在“相同”的 SDK 中实际上存在细微的变化。不过,我仍然认为这是一个 IDE/编译器标志问题。

有人有什么想法吗?我不想永远坚持3.2...

【问题讨论】:

  • 我遇到了同样的问题。奇怪的是,它只发生在“Release”,但也没有发生在“Debug”构建中,尽管我在更新到 4.0 SDK 后没有改变任何东西。但是,我还没有进一步检查。

标签: iphone xcode compiler-construction ios-simulator ios4


【解决方案1】:

确保使用与应用程序相同的基础 SDK 重新编译库。

【讨论】:

  • 感谢您的回答。我使用相同的基础 SDK,所以这似乎不是问题。正如另一个论坛 (forums.macrumors.com/showthread.php?t=956090) 中所建议的那样,我使用 XCode 而不是命令行构建了我的库,并且它有效。虽然我随后在命令行和 XCode 中使用了相同的 gcc 标志,但手动构建的 lib 仍然无法与我的应用程序一起使用...
【解决方案2】:

我终于能够弄清楚我的编译器调用中缺少哪些标志来构建我的库。所以,回答我的问题:如果有人在将他/她自己的静态库链接到 XCode 3.2.3 中的目标(使用 iPhoneSimulator3.2.sdk 或 iPhoneSimulator4.0.sdk)时遇到问题,您需要使用以下内容构建您的库两个标志:

-fobjc-abi-version=2

-fobjc-legacy-dispatch

再次感谢PhoneyDeveloperhis hints

【讨论】:

    【解决方案3】:

    另一个想法 - 即使图书馆没有参与,我过去也发生过这种情况。

    使用“组文件夹引用”选项仔细检查您是否没有导入文件。看来这让 Xcode 很头疼。 (至少在我的情况下是这样。)

    【讨论】:

      【解决方案4】:

      当我在项目中使用的“其他链接器标志”下删除诸如 (-ObjC, -all_load) 之类的标志时,我解决了这个问题。实际上存在 -all_load 冲突。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-25
        • 2011-02-01
        • 2016-01-25
        • 1970-01-01
        • 2023-03-10
        • 2011-03-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多