【发布时间】:2012-04-04 19:15:10
【问题描述】:
我正在开发的多平台应用程序使用单个 C++ 类的不同子类,具体取决于其运行的平台。我可以在不更改超类的情况下将 OS X 子类设为 Objective-C++ (.mm) 文件吗?
编辑:更多细节
项目现在包含这个文件层次结构:
* VideoDriver.cpp - (superclass)
- VideoDriver_OSX.cpp - (subclass, contains Mac implementation)
- VideoDriver_win.cpp - (subclass, contains Windows implementation)
- VideoDriver_X11.cpp - (subclass, contains Linux implementation)
简而言之,我希望能够在 VideoDriver_OSX 实现中使用 Core Animation 和其他 Cocoa 库。将其更改为 Objective-C++ 文件 (VideoDriver_OSX.mm) 允许我使用这些 Cocoa 库,但现在尝试实例化 VideoDriver_OSX 对象的代码行(在不同的文件中)会在运行时导致此动态链接器错误:
dyld: lazy symbol binding failed: Symbol not found: __ZN15VideoDriver_OSXC1EP10gui_info_sP6CPFifoI17DecodedVideoFrameE
这似乎与 C++ name mangling 有关,但我不知道如何解决它。我真的很感谢你的帮助,伙计们。
【问题讨论】:
-
有趣的是,我之前问过一个类似的问题,并举例说明了如何做到这一点:stackoverflow.com/questions/10014684/…
-
“我可以让 OS X 子类成为 Objective-C++ (.mm) 文件吗”
-
请贴出导致错误的代码行。
-
m_driver = new VideoDriver_OSX(m_gui_info, m_fifo_in);
-
调用的文件是什么类型的? .mm 还是 .cpp?
标签: c++ objective-c macos