【发布时间】: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