10

我可能有一个简单的问题,但是在编译过程中没有信息性错误或警告来提醒我出了什么问题。

我有一个包含 C++ 主文件和 ObjC 头文件的 Objective-C++ 应用程序。

它构建得很好,但是在运行时,它会给出以下错误消息:

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”包含在目标中(选中),并包含在#importObjC 类文件中。

任何帮助是极大的赞赏。

ObjC++ 经常让我头疼。

谢谢,

-S!

4

2 回答 2

6

显然缺少 AppController 类。AppController 类是否定义在动态库的框架中?如果是这样,当您运行应用程序时,它是否知道在哪里可以找到库/框架?

顺便说一句,这是一个链接器问题。头文件无关紧要。这是您需要查看的 .m 或 .mm 文件。

于 2010-04-11T18:52:29.833 回答
2

不确定这是否是您的问题,但我在使用 C++ dll 时遇到了类似的问题,这花了我一整天的时间来调试。我已经有 15 年没有使用 C++ 编程了,在尝试编写纯虚函数时,我使用了熟悉的语法“virtual void f();”。——哎呀。在 C++ 中,它应该是“virtual void f() == 0;” mac OSX 10.9.2 上最新版本的 gcc 可以愉快地编译代码。

我认为这是一个完全合法的前向声明......但是,不确定 C++ 是否允许类跨越多个文件,所以似乎应该标记这一点(因为 CXX 文件中没有提供任何实现。)无论如何,符号将其放入目标代码中,并且链接器从不抱怨,因此您最终会丢失引用。希望这可以帮助某人。

于 2014-04-12T06:03:48.807 回答