2013-06-27 3 views
2

Мне нужен фрейм QtMacExtras, чтобы использовать его класс QMacCocoaViewContainer.Проблемы с ссылками с QtMacExtras с использованием Qt 5.0.2

Я смог получить структуру и скомпилировать ее с помощью 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

Эта проблема возникает, когда вы создаете как C++.

Самый простой способ исправить это - включить расширение до .mm, но если вы вынудите инструментальную цепочку построить как Objective C++ любым способом, это должно устранить проблему.

+0

Этот отчет о проблеме старый, у меня есть вопросы, чтобы его проверить. Ваше решение имеет большой смысл, поэтому я буду принимать его в качестве ответа. – FabienRohrer