使用Qt 5.0.2将问题与QtMacExtras联系起来

时间:2013-06-27 13:44:20

标签: macos qt linker

我需要QtMacExtras框架来使用它的QMacCocoaViewContainer类。

我已经能够使用qmake / make轻松编译框架并且没有问题。 但是,当我尝试将二进制文件与它链接时,我得到了未定义的符号错误。 对象的编辑就像一个魅力。

g++ -mmacosx-version-min=10.7 --exported_symbols_list=symbols.exp -Wl,-x -L/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk/usr/lib -o myBinary *.o -bind_at_load -F/pathToMy/Frameworks -framework QtCore -framework QtMacExtras -framework QtGui -framework QtWidgets #...
Undefined symbols for architecture x86_64:
  "QMacCocoaViewContainer::QMacCocoaViewContainer(objc_object*, QWidget*)", referenced from:
    WbDockWidget::setContentWindowId(unsigned long long)in WbDockWidget.o
  ld: symbol(s) not found for architecture x86_64

实例化该类的代码如下:

#include <QtMacExtras/QMacCocoaViewContainer>
// ...
NSView *view = reinterpret_cast<NSView *>(id);
QWidget *widget = new QMacCocoaViewContainer(view, this);

评论此代码可以编译我的项目。

框架似乎正确链接,似乎正确包含了标题,并且似乎包含符号(!):

$ nm -g Frameworks/QtMacExtras.framework/Versions/5/QtMacExtras | grep -i cocoa
0000000000009240 T __ZN22QMacCocoaViewContainer11qt_metacallEN11QMetaObject4CallEiPPv
0000000000009200 T __ZN22QMacCocoaViewContainer11qt_metacastEPKc
0000000000004c00 T __ZN22QMacCocoaViewContainer12setCocoaViewEP6NSView
0000000000011130 S __ZN22QMacCocoaViewContainer16staticMetaObjectE
0000000000004b60 T __ZN22QMacCocoaViewContainerC1EP6NSViewP7QWidget
0000000000004b70 T __ZN22QMacCocoaViewContainerC2EP6NSViewP7QWidget
0000000000004d10 T __ZN22QMacCocoaViewContainerD0Ev
0000000000004d40 T __ZN22QMacCocoaViewContainerD1Ev
0000000000004d90 T __ZN22QMacCocoaViewContainerD2Ev
00000000000091e0 T __ZNK22QMacCocoaViewContainer10metaObjectEv
0000000000004e20 T __ZNK22QMacCocoaViewContainer9cocoaViewEv
0000000000011360 S __ZTI22QMacCocoaViewContainer
000000000000ce70 S __ZTS22QMacCocoaViewContainer
0000000000011160 S __ZTV22QMacCocoaViewContainer
0000000000004d50 T __ZThn16_N22QMacCocoaViewContainerD0Ev
0000000000004e10 T __ZThn16_N22QMacCocoaViewContainerD1Ev

任何能够使用本课程的建议都非常受欢迎。

此致。

1 个答案:

答案 0 :(得分:1)

当您构建为C ++时会发生此问题。

解决此问题的最简单方法是将扩展名切换为.mm,但如果您强制工具链以任何方式构建为Objective C ++,则应解决此问题。