代码之家  ›  专栏  ›  技术社区  ›  Stephen Furlani

找不到符号,应在平面命名空间objc中找到++

  •  8
  • Stephen Furlani  · 技术社区  · 15 年前

    我可能有一个简单的问题,但是在编译期间没有提示性的错误或警告来提醒我发生了什么错误。

    我有一个ObjaveC++应用程序,包括一个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 'd在objc类文件中。

    非常感谢您的帮助。

    objc++经常让我头疼。

    谢谢,

    -S!

    2 回复  |  直到 11 年前
        1
  •  5
  •   JeremyP    15 年前

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

    顺便说一下,这是一个链接器问题。头文件不相关。这是你需要看的.m或.m m文件。

        2
  •  1
  •   Josh    11 年前

    不确定这是否是你的问题,但是我有一个类似的问题,一个C++ DLL,我花了一整天调试。我还没有在C++中编程大约15年,在尝试编写纯虚函数时,我使用了熟悉的语法“虚空隙f-”,“OOPS”。在C++中,它应该是“虚空隙fE())=0;“最新版本的GCC在Mac OSX7.9上愉快地编译代码。

    我认为这是一个完全合法的远期声明…但是,不确定C++是否允许类跨越多个文件,所以看起来这应该被标记(因为在CXX文件中从来没有提供过实现)。在任何情况下,符号都会将其放入对象代码中,而链接器从不抱怨,所以最终得到了缺少的引用。希望这能帮助别人。

    推荐文章