符号未找到,预期在Flat Namespace ObjC ++中

时间:2010-04-08 14:48:38

标签: c++ objective-c macos objective-c++ dyld

我可能有一个简单的问题,但在编译过程中没有任何信息错误或警告,提醒我出现问题。

我有一个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!

2 个答案:

答案 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文件中没有提供任何实现。 )无论如何,符号使其成为目标代码,并且链接器永远不会抱怨,因此您最终会得到缺少的引用。希望这有助于某人。