“_OBJC_CLASS_$_”引用错误,尝试访问子项目文件时出现Xcode错误

4

我正在使用xcode项目中的一个子项目,并希望访问其中的文件。我已经在我的“构建设置”中将这些文件所在的目录添加到了“Header Search Paths”,因此当我导入它们时,不会出现任何编译器错误。我已经将子项目文件添加到了“Build Phases”中的“编译源”中。我已经将我的主项目文件添加到了主项目的“编译源”中。然而,当我尝试构建时,我遇到了以下错误:

Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_LoginService", referenced from:
objc-class-ref in GettingStartedViewController.o
"_OBJC_CLASS_$_ProfileService", referenced from:
objc-class-ref in GettingStartedViewController.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

有没有关于解决这个问题的思路?有没有好方法将子项目的文件添加到主项目的编译源中?但是当我这样做时,它会在xcode中创建一个独立的组,而不实际将文件添加到主项目的编译源中。
谢谢!


你的子项目目标创建了什么? - Phillip Mills
给未来的用户:请参考 https://www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial 这个教程。在该页面上搜索“添加依赖项”。 - jeet.chanchawat
1个回答

6
链接器报错是因为它找不到这些符号。假设LoginService和ProfileService来自你的子项目,你需要做的是将这些库(可能是从子项目构建的目标)添加到“链接二进制文件库”中的“生成阶段”。此外,您需要仔细检查您正在构建的主要目标的方案,并确保那些子项目的目标正在被构建(这将在方案对话框左侧显示的“构建阶段”中)。如果没有,您需要添加它们。这是将库添加到方案中。请注意,如果您已经勾选了“查找隐式依赖项”,则不需要进行任何操作。我使用Xcode 7.3.1构建了一个测试用例来进行双重检查。

enter image description here


嗨Ben,感谢你的帮助尝试。这个方法不起作用,需要将子项目添加为依赖项。-> https://www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial - jeet.chanchawat
有几种方法可以解决这个问题。您可以在Build Phases中使用目标依赖项,前提是您正在使用子项目(而不是许多人使用的工作区)。此外,如果您有“查找隐式依赖项”(应该是默认设置)或将目标添加到方案中的构建中,则也会执行相同操作。我已经添加了一张图片来说明我的意思。与目标依赖项相比,我更喜欢这种方法,因为更高级的项目使用工作区,而目标依赖项无法正常工作。 - Mobile Ben
太棒了!但我遇到了一个问题,即子项目中的图像未出现在主项目中。当从子项目推送ViewControllers到主项目时,我得到了黑屏。 - jeet.chanchawat
如果您在静态库的子项目中使用图像,则必须将这些图像明确添加为主项目的资源。 - Mobile Ben
好的。感谢你们所有的帮助。干杯! - jeet.chanchawat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接