2017-03-14 2 views
0

Ich habe ein Subdirs-Projekt, es gibt zwei Teilprojekte. Eine ist eine Qt Quick Controls 2 Anwendung und eine andere ist ein Qt Quick 2 Extension Plugin.Wie kann ich eine Methode von Qt Quick 2 Extension Plugin aufrufen?

TestQtQuickPlugin (Subdirs project) 
    |----app   (Qt Quick Controls 2 Application) 
    |  |------main.cpp 
    | ... 
    |----plugin  (Qt Quick 2 Extension Plugin) 
    |  |----MyItem.h 
    |  |----MyItem.cpp 
    |  ... 

MyItem Klasse erbt von QQuickItem, und es hat eine Methode getNum int(). In der Hauptmethode werde ich diese Methode von MyItem() aufrufen. GetNum().

In Ubuntu kompiliert und läuft es erfolgreich. Aber in Windows tritt ein Fehler auf:

main.obj : error LNK2019: unresolved external symbol "public: __cdecl MyItem::MyItem(class QQuickItem *)" ([email protected]@[email protected]@@@Z) referenced in function main

main.obj : error LNK2019: unresolved external symbol "public: virtual __cdecl MyItem::~MyItem(void)" ([email protected]@[email protected]) referenced in function main

main.obj : error LNK2019: unresolved external symbol "public: int __cdecl MyItem::getNum(void)" ([email protected]@@QEAAHXZ) referenced in function main

Was ist falsch an meinem Projekt?

+0

Sind Sie sicher, dass Sie eine Instanz einer QQuickItem-abgeleiteten Klasse in C++ erstellen möchten? –

+0

@KevinKrammer Nein, ich möchte nur eine statische Methode dieser Klasse aufrufen –

+0

Ah, ok, Ihre Syntax erstellt eine temporäre Instanz und ruft eine Methode dazu auf –

Antwort

1

Windows verwendet "Symbol ausblenden" beim Erstellen dynamisch verknüpfter Bibliotheken.

Damit Symbole außerhalb einer solchen Bibliothek "sichtbar" sind, müssen sie "exportiert" werden.

Siehe die documentation hier.

Dies kann tatsächlich auch unter Linux aktiviert werden, indem ein entsprechendes Flag für g ++ gesetzt wird.

Verwandte Themen