我可能有一个简单的问题,但在编译过程中没有任何信息错误或警告,提醒我出现问题。
我有一个Objective-C ++应用程序,其中包含C ++主文件和ObjC头文件。
它构建正常,但运行时,它会显示以下错误消息:
Dyld Error Message:
Symbol not found: _OBJC_CLASS_$_AppController
Referenced from: /Users/slate/Documents/osirixplugins/eqOsirix/build/Development/rcOsirix.app/Contents/MacOS/rcOsirix
Expected in: flat namespace
in /Users/slate/Documents/osirixplugins/eqOsirix/build/Development/rcOsirix.app/Contents/MacOS/rcOsirix
没有任何谷歌搜索导致了解决方案,我确信我错过了某个地方的编译或构建选项。
“AppController.h”包含在目标(已选中)中,而#import
包含在ObjC类文件中。
非常感谢任何帮助。
ObjC ++经常让我头疼。
谢谢,
-S!
答案 0 :(得分:5)
显然缺少AppController类。 AppController类是在动态库的框架中定义的吗?如果是这样,当您运行应用程序时,它是否知道在哪里可以找到库/框架?
顺便说一下,这是一个链接器问题。头文件无关紧要。这是你需要查看的.m或.mm文件。
答案 1 :(得分:1)
不确定这是否是你的问题,但是我遇到了类似的问题,C ++ dll让我整天都在调试。我还没有用C ++编程大约15年,在尝试编写纯虚函数时,我使用了熟悉的语法" virtual void f();" - 哎呀在C ++中它应该是" virtual void f()== 0;" mac OSX 10.9.2上最新版本的gcc很高兴地编译代码。
我认为它是完全合法的前向声明...但是,不确定C ++是否允许类跨越多个文件,所以看起来应该标记这一点(因为CXX文件中没有提供任何实现。 )无论如何,符号使其成为目标代码,并且链接器永远不会抱怨,因此您最终会得到缺少的引用。希望这有助于某人。