Seite 1 von 1

DLL Oberfläche in QT

Verfasst: 16. November 2007 12:03
von algorithmica
Hallo!

Ich habe in ANSI C++ eine DLL für Windows geschrieben und möchte nun in QT 4.3 eine Oberfläche schreiben. Alles kompiliert prima, aber ich kriege es nicht dazu zu linken. Die Header-Datei aus dem DLL Projekt habe ich im QT-Projekt #include'ded und die .lib Datei in der .pro Datei unter LIBS += XXX.lib angegeben. Dazu sollte ich noch sagen, dass die Klasse in der DLL mit class __declspec(dllexport) CKlasse deklariert wurde.

Nun become ich beim kompilieren den Fehler "undefined reference to" für jede Funktion aus der DLL die ich aufrufen möchte.

Könnt Ihr mir weiterhelfen? Vielen Dank !!!!!

Patrick

Verfasst: 16. November 2007 12:23
von DeepDiver
Hi,

Der Linker findet die Lib nicht.

Hast Du die xxx.lib mit dem vollständigen Pfad angegeben?
Oder mit -lxxx.lib?

Hier Qt Docs:
http://doc.trolltech.com/4.3/qmake-vari ... .html#libs


Gruß,

Tom

Verfasst: 16. November 2007 12:31
von algorithmica
Hi Tom,

ich habe den kompletten Pfad angegeben, also

LIBS += C:/.../XXX.lib

Die Variante mit -l gibt den gleichen Fehler.

Gruß
Patrick

Verfasst: 16. November 2007 12:46
von DeepDiver
Hi,

nur mal so um die Basics auszuschliessen:
Version von Header, lib und dll sind die selben?
Ist die Referenz in lib und dll definiert?

Wie ist die declspec im header definiert?
Die sollte dllexport im dll-Projekt sein und dllimport im Qt-Projekt.

Gruß,

Tom

Verfasst: 16. November 2007 13:05
von algorithmica
Hi Tom,

ja, alle diese Punkte habe ich beachtet. :-)

Gruß
Patrick

Verfasst: 16. November 2007 13:10
von DeepDiver
Hi,

vielleicht Spaces im Pfad?
Das ist ja immer ein Problem.

Gruß,

Tom

Verfasst: 16. November 2007 13:22
von algorithmica
Hi Tom,

es gibt keine Spaces im Pfad. Die .lib wird gefunden (ich habe ausprobiert welche Fehlermeldung ich durch nicht finden bekomme -- der Linker sagt einfach, dass er die Datei nicht findet. Ich bekomme aber andere Fehler, also muss er die .lib finden.), aber irgendwie werden die Funktionen nicht gelinkt.

Gruß
Patrick

Verfasst: 16. November 2007 14:06
von DeepDiver
Hi,

langsam bin auch ich dann mit meinem Latein am Ende.
Aus irgendeinem Grund passen die Symbole mit den Funktionsprototypen
nicht zusammen.

Sind die Compiler-Settings der beiden Projekte einigermassen identisch?

Sorry - mehr fällt mich nicht ein!

Kannst Du die Projekte zur Verfügung stellen? - Wahrscheinlich nicht.
Evtl. in einem separatem Projekt reproduzieren und posten!

CU Tom

Verfasst: 16. November 2007 14:21
von RHBaum
wird das dll Project und deine .exe ueberhaupt mit dem selben compiler uebersetzt ?
Nun become ich beim kompilieren den Fehler "undefined reference to" für jede Funktion aus der DLL die ich aufrufen möchte.
deine "einstiegsfunktionen" in die Dll sind normale funktionen die nur deine Klassendefinition als Parameter verwenden, oder exportierst du nur die komplette Klasse, und meinst mit den Funktionen die Methoden deiner Klasse ?

Hasst du irgendwo "extern C" stehen ? (manche generatoren mogeln das mal unter) ...

Ciao ...

Verfasst: 16. November 2007 18:09
von algorithmica
hi,

die DLL habe ich unter .NET 2005 geschrieben und versuche nun die Oberfläche mit mingw anhand der opensource Variante von QT zu kompilieren. Ich versuche die komplette Klasse zu exportieren und möchte dann die Funktionen der Klasse aufrufen. extern "C" habe ich nicht benutzt.

Wenn ich eine Oberfläche innerhalb von .NET schreibe, klappt alles. Deshalb bin ich nicht davon ausgegangen, dass meine DLL nicht in Ordnung ist. Hmmmm, jetzt habe ich zwar Zweifel, aber komme noch nicht so richtig weiter.

Gruß
Patrick

Verfasst: 16. November 2007 20:20
von Christian81
MSVC und MinGW sind nicht ABI-kompatibel - man kann nicht gegen eine C++ lib linken die nicht vom gleichen Compiler ist.