Seite 1 von 2
[Qt4] [WIN] Gehen in Dlls keine Objecte mehr?
Verfasst: 12. Oktober 2005 17:10
von FlorianBecker
dongle.obj : error LNK2019: unresolved external symbol "public: static struct QM
etaObject const plaa::MessageBox::staticMetaObject" (?staticMetaObject@MessageBo
x@plaa@@2UQMetaObject@@B) referenced in function "public: static class QString _
_cdecl plaa::MessageBox::tr(char const *,char const *)" (?tr@MessageBox@plaa@@SA
?AVQString@@PBD0@Z)
C:\plaasoft\data\lib\dongle.dll : fatal error LNK1120: 1 unresolved externals
NMAKE : fatal error U1077: 'link' : return code '0x460'
Das kommt immer, wenn ich gegen eine Lib linken möchte. Ging mit Qt3, mit Qt4 nicht mehr!? Oder ist das nur wieder ein neuer Fehler der Qt 4.0.1?
Verfasst: 12. Oktober 2005 17:23
von lepsai
Du linkst also eine Dll gegen ne Lib, oder was?
Verfasst: 12. Oktober 2005 17:29
von FlorianBecker
Ich linke eine DLL gegen eine Lib, exact.
Verfasst: 12. Oktober 2005 17:59
von lepsai
Beim linken von einer Lib werden die Abhängigkeiten nicht aufgelöst, also kann der Fehler eigentlich nur dann auftreten, wenn du diese Lib gegen eine Exe oder eine Dll linkst...
Verfasst: 12. Oktober 2005 18:05
von FlorianBecker
Hä? Ja, beim linken eine LIB. Aber ok, pass auf:
Ich habe eine Lib mit dem Namen core.lib, dazu gehört core.dll und auf die core.dll greifen ein paar Dlls zu, eben die dongle.dll, also muss ich die dongle.dll gegen die core.lib linken, was ich ja auch tue und genau dann tritt der oben gezeigte Fehler auf.
Unter Qt3 ging das und mit nicht Qt libs gehts ja auch hervorragend. Aber das ist ja kein Einzelfall, bei allen anderen Dlls, die ich gegen die core.dll linken möchte, wenn es sich um Objects handelt bekomme ich immer diese Fehlermeldungen.
Verfasst: 12. Oktober 2005 18:52
von lepsai
Ok, das bezeiche ich als Linken gegen eine Dll und nicht eine Lib. Dass es technisch über ne lib geht ist klar. Ich dachte du meintest eine statische Lib...
Und core.dll ist eine Qt Dll oder was?
Verfasst: 12. Oktober 2005 20:39
von FlorianBecker
core.dll ist meine dll
Verfasst: 12. Oktober 2005 20:47
von lepsai
ja, das ist klar. Die Frage war, ob du in dieser Dll Qt verwendest?
Verfasst: 12. Oktober 2005 20:49
von FlorianBecker
Ja, in beiden, sonst hätte ich das Problem gar nicht, wie gesagt, es passiert nur mit Q_OBJECTs. Bei STL Libs passiert das nicht und sonst auch nicht. Komische Sache.
Verfasst: 12. Oktober 2005 21:06
von lepsai
poste mal bitte den header zu core.dll.... mal sehen
Verfasst: 12. Oktober 2005 21:10
von FlorianBecker
Code: Alles auswählen
#ifdef WINDOWS
# ifndef PLAASOFT_STATIC
# ifdef PLAASOFT_MAKEDLL
# define EXPORT_PLAASOFT __declspec(dllexport)
# else
# define EXPORT_PLAASOFT __declspec(dllimport)
# endif
# endif
#endif
#ifndef EXPORT_PLAASOFT
#define EXPORT_PLAASOFT
#endif
Was meinst du, welchen Header? Es gibt mehrere Header in der Datei, ist das da oben das, was du meinst? Die Header werden dann jeweils mit class EXPORT_PLAASOFT ClassName behandelt und in der Pro Datei wird für Windows WINDOWS und PLAASOFT_MAKEDLL definiert.
Verfasst: 12. Oktober 2005 21:30
von lepsai
Da scheint alles korrekt zu sein... Arbeitest du mit namespace?
Verfasst: 12. Oktober 2005 21:32
von FlorianBecker
Ja. Ja, wie gesagt, wenn das nun Qt3 wäre geht es ja auch problemlos.
Verfasst: 12. Oktober 2005 21:36
von lepsai
ich würde an deiner Stelle erstmal ohne Namespace probieren. Ich meine eigene Namespaces...
Verfasst: 12. Oktober 2005 21:39
von FlorianBecker
Ok, probieren kann man das ja mal. Wäre aber Schade. Hast du keine Qt4 Lib mit Q_OBJECT die du wo gegen linkst?