# Qt4 unter Windows und Libnodave



## Waddi (16 Februar 2011)

Guten Tag,

ich versuche mittels der QT SDK eine GUI für mein Programm zu Steuerung von S7 - 1200ern zu erstellen. Soweit so Gut, aber wenn ich nun versuche in dieser SDK meinen Quellcode für die Kommunikation zu erstellen bekomme ich einen Fehler:

undefined reference to ...

das Problem kenne ich. Ich muss dem Linker die libnodave.lib irgendiwe übergeben. Nur weiss ich nicht wie. In der *.pro Datei habe ich bereits versucht etwas zu editieren, aber bislang ohne Erfolg. 
Auch habe ich was davon gelesen, das der Compiler die *.lib nicht erkennen kann und ich eine *.a brauche. 

Habt Ihr Ideen oder Anregungen, die mich weiter bringen können?

Vielen Danke im Voraus


----------



## Thomas_v2.1 (16 Februar 2011)

Was für einen Compiler benutzt du denn in Zusammenhang mit Qt?
Wenn du den MS-Compiler benutzt brauchst du eine *.lib, beim MinGW und anderen Windows GCC-Clonen brauchst du eine *.a Datei.

Was hast du denn vor: statisch linken, dynamisch linken (dll)?


----------



## Jochen Kühner (16 Februar 2011)

Soll es ein Windows oder Linux Programm werden?  (Sorry hab den Titel überlesen!) 
Compiler? 

Häng mal deine .pro Datei an!


----------



## Waddi (16 Februar 2011)

Ja ich benutze MinGW so wie es aussieht. 



Thomas_v2.1 schrieb:


> Was hast du denn vor: statisch linken, dynamisch linken (dll)?



Kann ich dir nicht genau beantworten. Also möchte das Programm halt fertig erstellt haben . Und um libnodave zu erstelln brauche ich ja die libnodave.lib. Soviel weiß ich! 

Hoffe das kommt jetzt nicht zu anfängerhaft rüber.


----------



## Waddi (16 Februar 2011)

Jochen Kühner schrieb:


> Häng mal deine .pro Datei an!



Habe nur hinzugefügt:

LIBS += -llibnodave

und dann konnte er die Datei nicht finden.


----------



## pvbrowser (16 Februar 2011)

Offensichlich hast Du die LGPL Version von Qt für MinGW unter Windows.
Dann hast Du name.a bei statischen Libs.

Hier poste ich mal einen PRO File aus pvbrowser.
Da kannst Du das in der Sektion win32-g++ abgucken
oder gleich http://pvbrowser.org nehmen,
da ist unter Anderem auch libnodave mit drin. 

######################################################################
# generated by pvdevelop at: So. Jan 23 16:34:31 2011
######################################################################

TEMPLATE = app
CONFIG   = warn_on release
CONFIG  -= qt

# Input
HEADERS += processviewserver.h
#HEADERS += rldefine.h
HEADERS += pvapp.h      \
           mask1_slots.h
SOURCES += main.cpp     \
           mask1.cpp

!macx {
unix:LIBS          += /usr/lib/libpvsmt.so -pthread
#unix:LIBS         += /usr/lib/libpvsid.so
unix:INCLUDEPATH   += /opt/pvb/pvserver
unix:LIBS         += /usr/lib/librllib.so
unix:INCLUDEPATH  += /opt/pvb/rllib/lib
}

macx:LIBS          += /opt/pvb/pvserver/libpvsmt.a /usr/lib/libpthread.dylib
#macx:LIBS         += /opt/pvb/pvserver/libpvsid.a
macx:INCLUDEPATH   += /opt/pvb/pvserver
#macx:LIBS         += /usr/lib/librllib.dylib
#macx:INCLUDEPATH  += /opt/pvb/rllib/lib

win32-g++ {
QMAKE_LFLAGS       += -static-libgcc
#win32:LIBS        += "$(PVBDIR)/win-mingw/bin/librllib.a"
win32:LIBS         += "$(PVBDIR)/win-mingw/bin/libserverlib.a" "$(MINGWDIR)/lib/libws2_32.a" "$(MINGWDIR)/lib/libadvapi32.a"
win32:INCLUDEPATH  += "$(PVBDIR)/pvserver"
#win32:INCLUDEPATH += "$(PVBDIR)/rllib/lib"
}
else {
win32:LIBS         += "$(PVBDIR)/win/bin/serverlib.lib" wsock32.lib advapi32.lib
win32:INCLUDEPATH  += "$(PVBDIR)/pvserver"
#win32:LIBS        += "$(PVBDIR)/win/bin/rllib.lib"
#win32:INCLUDEPATH += "$(PVBDIR)/rllib/lib"
}

#DEFINES += USE_INETD
TARGET = pvs


----------



## Waddi (16 Februar 2011)

So ich habe es hinbekommen!

Hab die *.pro geändert und die *.dll in den bin Ordner zur *.exe getan.

Ein Problem war, dass der angegebene Pfad zur libnodave.lib nicht erkannt worden ist. Ich habe diesen Pfad nu kürzer gewählt und will
jetzt noch herausfinden warum dieser Pfad nicht akzeptiert worden ist.

Folgende Zeile habe ich editiert.

win32:LIBS += "c:/Qt/libnodave.lib"

Danke


----------



## pvbrowser (16 Februar 2011)

Der Pfad sollte eigentlich beliebig lang sein können.
Du hast ja auch die Gänsefüsschen um den Pfad gemacht.
Das wird meist vergessen und geht dann schief, wenn Leerzeichen im Pfad sind.

Die DLL's müssen beim Starten des Programmes natürlich erst noch gefunden werden.
Also, entweder in das selbe Verzeichnis kopieren, wie die Anwendung selber oder in einem Pfad der systemweit bekannt ist.


----------

