DLL Oberfläche in QT

Alles rund um die Programmierung mit Qt
Antworten
algorithmica
Beiträge: 6
Registriert: 24. Oktober 2007 11:53
Wohnort: Bremen
Kontaktdaten:

DLL Oberfläche in QT

Beitrag 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
__________________
Dr. Patrick Bangert
algorithmica technologies GmbH
Außer der Schleifmühle 67
28203 Bremen

p.bangert@algorithmica-technologies.com
http://www.algorithmica-technologies.com
__________________
DeepDiver
Beiträge: 34
Registriert: 7. November 2007 10:10
Wohnort: Fürstenfeldbruck
Kontaktdaten:

Beitrag 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
algorithmica
Beiträge: 6
Registriert: 24. Oktober 2007 11:53
Wohnort: Bremen
Kontaktdaten:

Beitrag 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
DeepDiver
Beiträge: 34
Registriert: 7. November 2007 10:10
Wohnort: Fürstenfeldbruck
Kontaktdaten:

Beitrag 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
algorithmica
Beiträge: 6
Registriert: 24. Oktober 2007 11:53
Wohnort: Bremen
Kontaktdaten:

Beitrag von algorithmica »

Hi Tom,

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

Gruß
Patrick
DeepDiver
Beiträge: 34
Registriert: 7. November 2007 10:10
Wohnort: Fürstenfeldbruck
Kontaktdaten:

Beitrag von DeepDiver »

Hi,

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

Gruß,

Tom
algorithmica
Beiträge: 6
Registriert: 24. Oktober 2007 11:53
Wohnort: Bremen
Kontaktdaten:

Beitrag 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
DeepDiver
Beiträge: 34
Registriert: 7. November 2007 10:10
Wohnort: Fürstenfeldbruck
Kontaktdaten:

Beitrag 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
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag 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 ...
algorithmica
Beiträge: 6
Registriert: 24. Oktober 2007 11:53
Wohnort: Bremen
Kontaktdaten:

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

MSVC und MinGW sind nicht ABI-kompatibel - man kann nicht gegen eine C++ lib linken die nicht vom gleichen Compiler ist.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten