Debug-Infos von LibNoDave deaktivieren?

muhmann

Level-1
Beiträge
14
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo zusammen,

ich verwende seit einiger Zeit LibNoDave recht erfolgreich und habe mein Programm soweit fertig. Bin derzeit dabei, die Ausgabe etwas zu verbessern. Was mir in diesem Zusammenhang aufgefallen ist, sind die Debug-Informationen von LibNoDave.

Hier mal ein Screenshot von dem was ich meine:
libnodavedebug.jpg


Ich frage in regelmäßigen Abständen meine analogen Eingänge ab, jedoch stören mich die "bind Socket error" und "Connected to host..." Ausgaben.

Diese Ausgaben sind in der "openSocket" Funktion zu finden (openSocket.c). Sie erfolgen über ein Makro, LOG2, welches in der log2.h definiert ist. Ich habe versucht die alternative Version dieses Markos mit "NO_PRINT_CODE" zu nutzen, was aber auch nichts genutzt hat. Ebenso funktionierte das auskommentieren der entsprechenden Zeilen nicht.

Diese Zeile ist die einzig Debugspezifische in meiner Funktion:
Code:
daveSetDebug(daveDebugPrintErrors);
Die anderen Debug-Defines zu "daveDebugPrintErrors" habe ich ebenfalls durchprobiert, aber ein Define zum deaktivieren scheint es nicht zu geben.

Habt Ihr vielleicht eine Idee wie ich die beiden Ausgaben deaktivieren kann?
 
In log2.h

//######################################
#ifdef HAVE_PRINTF
#define LOG1(x) fprintf(logout,x)
#define LOG2(x,y) fprintf(logout,x,y)
#define LOG3(a,b,c) fprintf(logout,a,b,c)
#define LOG4(a,b,c,d) fprintf(logout,a,b,c,d)
#define LOG5(a,b,c,d,e) fprintf(logout,a,b,c,d,e)
#define LOG6(a,b,c,d,e,f) fprintf(logout,a,b,c,d,e,f)
#define LOG7(a,b,c,d,e,f,g) fprintf(logout,a,b,c,d,e,f,g)
#define FLUSH fflush(logout)

#define LOG_1(a) fprintf(logout,a)
#define LOG_2(a,b) fprintf(logout,a,b)
#endif /* HAVE_PRINTF */
//### ersetzen durch #############################
#ifdef HAVE_PRINTF
#define LOG1(x)
#define LOG2(x,y)
#define LOG3(a,b,c)
#define LOG4(a,b,c,d)
#define LOG5(a,b,c,d,e)
#define LOG6(a,b,c,d,e,f)
#define LOG7(a,b,c,d,e,f,g)
#define FLUSH

#define LOG_1(a)
#define LOG_2(a,b)
#endif /* HAVE_PRINTF */
//###################################
Und dann Bibliothek neu übersetzen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für den Tipp, das hatte ich noch nicht versucht.

Ich kam gestern leider nicht mehr dazu zu antworten. Jedenfalls habe ich die log2.h geändert, hatte aber Probleme beim kompilieren der LibNoDave Bibliothek. Ich habe das Makefile.vc und die dazugehörige .bat entsprechend meinen Visual Studio 10 Pfaden angepasst, jedoch will das Makefile die .lib und die .dll nicht neu erstellen.

Muss man da evtl. etwas bestimmtes beachten?
 
... hatte aber Probleme beim kompilieren der LibNoDave Bibliothek. Ich habe das Makefile.vc und die dazugehörige .bat entsprechend meinen Visual Studio 10 Pfaden angepasst, jedoch will das Makefile die .lib und die .dll nicht neu erstellen.

Muss man da evtl. etwas bestimmtes beachten?

Ich verwende hauptsächlich Linux und unter Windows MinGW.
Früher habe ich aber Visual C++ 6.0 verwendet.

Lege in Visual C++ doch einfach ein neues Projekt an
entweder als "Win32-Bibliothek (statisch)" (wahrscheinlich das Einfachste)
oder "Win32 Dynamic-Link Library"
und füge die Dateien "setportw.c nodave.c" in das Projekt ein.
Dann sollte doch schon alles OK sein.

Da fällt mir noch ein, dass es da eine BAT Datei von Visual C++ gbt, die Dir ein paar Environment Variablen setzt.
Vielleicht musst Du die ja erst aufrufen.
Bei VS 6.0 ist das:
c:\Programme\Microsoft Visual Studio\VC98\Bin\VCVARS32.bat
 
Die statische Bibliothek konnte ich erstellen, jedoch reicht sie leider nicht aus. Sobald ich mein Programm damit erstellen möchte, bringt er bei den LibNoDave spezifischen Funktionen den Fehler "LNK2019: Verweis auf nicht aufgelöstes externes Symbol ...". Das dürfte wegen der .dll sein.

Ich habe das Projekt von einer statischen zu einer dynamischen Bibliothek geändert. Hier bringt er die gleiche Fehlermeldung in den Funktionen "daveReadISOPacket", "daveSendISOPacket" und "openSocket". Damit sind die Befehle "recv", "select", "send" und einige weitere gemeint. Das sollten meines Wissens nach Netzwerkbefehle sein.

winsock2.h wird jedenfalls eingebunden, daher sollte das eigentlich funktionieren. Ich verwende zum erstellen der dynamischen Bibliothek die Dateien nodave.c und openSocketw.c. Sowie die Header dieser 2 Dateien und log2.h.

Benötigt LibNoDave evtl. einen speziellen socket-Header?
Mir scheint, dass es hier einige Probleme bei der Portierung auf Windows gibt. Zumal einige Header-Dateien Linux spezifisch sind. Z.b. die sys/socket.h
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... Damit sind die Befehle "recv", "select", "send" und einige weitere gemeint. Das sollten meines Wissens nach Netzwerkbefehle sein.

Du musst die wsock32 bzw. die neuere ws2_32 (kann auch Ipv6 usw.) mit angeben. Die die beiden Libs gehören zum Compiler. Die obigen funktionen gehören zur Socket Library.
 
Die statische Bibliothek konnte ich erstellen, jedoch reicht sie leider nicht aus. Sobald ich mein Programm damit erstellen möchte, bringt er bei den LibNoDave spezifischen Funktionen den Fehler "LNK2019: Verweis auf nicht aufgelöstes externes Symbol ...". Das dürfte wegen der .dll sein.

Ich habe das Projekt von einer statischen zu einer dynamischen Bibliothek geändert. Hier bringt er die gleiche Fehlermeldung in den Funktionen "daveReadISOPacket", "daveSendISOPacket" und "openSocket". Damit sind die Befehle "recv", "select", "send" und einige weitere gemeint. Das sollten meines Wissens nach Netzwerkbefehle sein.

winsock2.h wird jedenfalls eingebunden, daher sollte das eigentlich funktionieren. Ich verwende zum erstellen der dynamischen Bibliothek die Dateien nodave.c und openSocketw.c. Sowie die Header dieser 2 Dateien und log2.h.

Benötigt LibNoDave evtl. einen speziellen socket-Header?
Mir scheint, dass es hier einige Probleme bei der Portierung auf Windows gibt. Zumal einige Header-Dateien Linux spezifisch sind. Z.b. die sys/socket.h

Hab bei mir auch die Makefiles für 2010 angepasst, und zwei Batchdateien zum compilieren geschrieben. Kann Ich dir morgen Online stellen (hab meinen Lappi auf der Baustelle vergessen!)
 
Du musst die wsock32 bzw. die neuere ws2_32 (kann auch Ipv6 usw.) mit angeben. Die die beiden Libs gehören zum Compiler. Die obigen funktionen gehören zur Socket Library.
Jetzt funktioniert es, vielen dank :p
Ich dachte es würde ausreichen, die Header-Dateien einzubinden.

@Jochen Kühner
Ja das wäre super wenn Du die Online stellen könntest. Die Lösung über ein Visual Studio-Projekt funktioniert zwar, jedoch hätte ich schon gerne die Möglichkeit LibNoDave mit der Makefile und .bat Dateien zu erstellen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Jochen Kühner
Ja das wäre super wenn Du die Online stellen könntest. Die Lösung über ein Visual Studio-Projekt funktioniert zwar, jedoch hätte ich schon gerne die Möglichkeit LibNoDave mit der Makefile und .bat Dateien zu erstellen.

jo, stells morgen online.

habe es auch schon mitels einem visual studio projekt compiliert, jedoch war bei mir dann die dll mehr als doppelt so groß und lief nur auf rechnern mit visual studio....
 
Meine Batchfiles :

vcwinmake1.bat:

"C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"

vcwinmake2.bat:

set PATH_TO_MAKE="C:\Program Files\Microsoft Visual Studio 9.0\VC\bin\nmake"
%PATH_TO_MAKE% /f MAKEFILE.VC %1

makefile.vc:

#
# Makefile to build a Windows Version of LIBNODAVE using MSVC++ from Microsoft.
#
# type 'make' to build libnodave.dll and some statically linked test programs.
# type 'make dynamic' to make libnodave.dll and some dynamically linked test programs.
#
# The directory where the tools are:
#
VCPATH=d:\programme\microsoft visual C++ Toolkit 2003
SDKPATH=d:\programme\microsoft platform sdk

VCPATH=C:\Program Files\Microsoft Visual Studio 9.0\VC
SDKPATH=C:\Program Files\Microsoft SDKs\Windows\v6.0A


CC="$(VCPATH)\bin\cl"
LL="$(VCPATH)\bin\link"

CFLAGS= -I"$(VCPATH)\include" -I"$(SDKPATH)\include" -c -DBCCWIN -DDAVE_LITTLE_ENDIAN -TC
LFLAGS= /LIBPATH:"$(VCPATH)"\lib,"$(SDKPATH)"\lib
LLFLAGS = /LIBPATH:"$(VCPATH)\lib" /DEF:libnodave.DEF

PROGRAMS=testMPI.exe testPPI.exe testAS511.exe\
testPPI_IBH.exe testPPI_IBHload.exe testPPIload.exe \
testMPIload.exe testISO_TCP.exe testISO_TCPload.exe testIBH.exe testMPI_IBHload.exe \
testNLpro.exe testS7online.exe


DYNAMIC_PROGRAMS=testMPId.exe testPPId.exe testISO_TCPd.exe testIBHd.exe testPPI_IBHd.exe

LIBRARIES=libnodave.dll

all: $(LIBRARIES)

dynamic: $(DYNAMIC_PROGRAMS)

testISO_TCP.exe: nodave.obj openSocketw.obj testISO_TCP.obj
$(LL) $(LFLAGS) testISO_TCP.obj openSocketw.obj nodave.obj "$(SDKPATH)"\lib\ws2_32.lib /OUT:testISO_TCP.exe
testMPI.exe: setportw.obj nodave.obj testMPI.obj
$(LL) $(LFLAGS) setportw.obj nodave.obj testMPI.obj "$(SDKPATH)"\lib\ws2_32.lib /OUT:testMPI.exe
testIBH.exe: openSocketw.obj nodave.obj testIBH.obj
$(LL) $(LFLAGS) openSocketw.obj nodave.obj testIBH.obj "$(SDKPATH)"\lib\ws2_32.lib /OUT:testIBH.exe
testIBHd.exe: libnodave.dll testIBH.obj
$(LL) $(LFLAGS) testIBH.obj libnodave.lib /OUT:testIBHd.exe
testPPI_IBH.exe: openSocketw.obj nodave.obj testPPI_IBH.obj
$(LL) $(LFLAGS) openSocketw.obj nodave.obj testPPI_IBH.obj "$(SDKPATH)"\lib\ws2_32.lib /OUT:testPPI_IBH.exe
testPPI_IBHd.exe: libnodave.dll testPPI_IBH.obj
$(LL) $(LFLAGS) testPPI_IBH.obj libnodave.lib /OUT:testPPI_IBHd.exe
testMPId.exe: libnodave.dll testMPI.obj
$(LL) $(LFLAGS) testMPI.obj libnodave.lib /OUT:testMPId.exe
testPPI.exe: testPPI.obj nodave.obj setportw.obj
$(LL) $(LFLAGS) setportw.obj nodave.obj testPPI.obj "$(SDKPATH)"\lib\ws2_32.lib /OUT:testPPI.exe
testPPId.exe: libnodave.dll testPPI.obj
$(LL) $(LFLAGS) testPPI.obj libnodave.lib /OUT:testPPId.exe
testISO_TCPd.exe: libnodave.dll testISO_TCP.obj
$(LL) $(LFLAGS) testISO_TCP.obj libnodave.lib /OUT:testISO_TCPd.exe
testPPIload.exe: nodave.obj setportw.obj testPPIload.obj
$(LL) $(LFLAGS) setportw.obj nodave.obj testPPIload.obj "$(SDKPATH)"\lib\ws2_32.lib /OUT:testPPIload.exe
testMPIload.exe: nodave.obj setportw.obj testMPIload.obj
$(LL) $(LFLAGS) setportw.obj nodave.obj testMPIload.obj "$(SDKPATH)"\lib\ws2_32.lib /OUT:testMPIload.exe
testISO_TCPload.exe: nodave.obj openSocketw.obj testISO_TCPload.obj
$(LL) $(LFLAGS) openSocketw.obj nodave.obj testISO_TCPload.obj "$(SDKPATH)"\lib\ws2_32.lib /OUT:testISO_TCPload.exe
testMPI_IBHload.exe: nodave.obj openSocketw.obj testMPI_IBHload.obj
$(LL) $(LFLAGS) openSocketw.obj nodave.obj testMPI_IBHload.obj "$(SDKPATH)"\lib\ws2_32.lib /OUT:testMPI_IBHload.exe
testPPI_IBHload.exe: nodave.obj openSocketw.obj testPPI_IBHload.obj
$(LL) $(LFLAGS) openSocketw.obj nodave.obj testPPI_IBHload.obj "$(SDKPATH)"\lib\ws2_32.lib /OUT:testPPI_IBHload.exe
testAS511.exe: testAS511.obj nodave.obj setportw.obj
$(LL) $(LFLAGS) setportw.obj nodave.obj testAS511.obj "$(SDKPATH)"\lib\ws2_32.lib /out:$@
testNLpro.exe: testNLpro.obj nodave.obj openSocketw.obj
$(LL) $(LFLAGS) openSocketw.obj nodave.obj testNLpro.obj "$(SDKPATH)"\lib\ws2_32.lib /out:$@
libnodave.dll: nodave.obj setportw.obj openSocketw.obj openS7online.obj
$(LL) $(LLFLAGS) /DLL nodave.obj setportw.obj openSocketw.obj openS7online.obj "$(SDKPATH)"\lib\ws2_32.lib /OUT:libnodave.dll
testS7online.exe: testS7online.obj nodave.obj openS7online.obj
$(LL) $(LFLAGS) nodave.obj testS7online.obj openS7online.obj "$(SDKPATH)"\lib\ws2_32.lib "$(SDKPATH)"\lib\user32.lib /out:$@

#
# delete all but the sources:
#
clean:
del /f /q *.tds *.il? *.obj *.map *.lib *.dll *.exe *.exp *.o *.a
distclean:
del /f /q *.tds *.il? *.obj *.map

nodave.obj: nodave.c nodave.h
$(CC) $(CFLAGS) -DDOEXPORT nodave.c
setportw.obj: setportw.c
$(CC) $(CFLAGS) -DDOEXPORT setportw.c
openSocketw.obj: openSocketw.c
$(CC) $(CFLAGS) -DDOEXPORT openSocketw.c
openS7online.obj: openS7online.c openS7online.h
$(CC) $(CFLAGS) -DDOEXPORT openS7online.c
s7fake.obj: s7fake.c
$(CC) $(CFLAGS) -DDOEXPORT s7fake.c
 
Danke Jochen.

Aber was mich stutzig macht, meine Dateien sind mit deinen absolut identisch. Mit dem Unterschied, dass ich anstatt VS 9.0, 10.0 benutze und das auch entsprechend als Pfad eingetragen habe. Ich kann die Dateien dennoch nicht erstellen :confused:

Edit:
Ok, hat sich erledigt. Jetzt funktioniert es. Man muss die Visual Studio Eingabeaufforderung benutzen, erst dann funktioniert es.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke Jochen.

Aber was mich stutzig macht, meine Dateien sind mit deinen absolut identisch. Mit dem Unterschied, dass ich anstatt VS 9.0, 10.0 benutze und das auch entsprechend als Pfad eingetragen habe. Ich kann die Dateien dennoch nicht erstellen :confused:

Edit:
Ok, hat sich erledigt. Jetzt funktioniert es. Man muss die Visual Studio Eingabeaufforderung benutzen, erst dann funktioniert es.

Entweder das, oder du rufst "vcvarsall.bat" von VS2010 auf!
 
Lustigerweise hatte ich bereits vcvarsall.bat ausgeführt. Sogar mehrfach. Hat dennoch nicht funktioniert, nur in der VS Eingabeaufforderung funktionierte es. Womöglich ist bei der Installation von VS etwas schiefgelaufen, so dass er nicht alle Umgebungsvariablen korrekt setzen konnte, oder sowas in der Art :p
 
Syntax Error

Hallo,

Beschäftige mich gerade mit diesem Thema und habe jetzt die Quellcodes von Jochen übernommen.

Allerdings erhalte ich beim ausführen von vcwinmake2.bat folgende Meldung:

MAKEFILE.VC(81) : fatal error U1034: Syntaxfehler: Trennzeichen fehlt
Stop.

Weis da jemand rat? Ich kenne mich mit der Syntax von dem Makefile nicht aus.
 
Danke das hat mich ein kleines Stück weitergebracht.

Ich komme jetzt allerdings auf diese Ausgabe.

vcwinmake2.bat
"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\cl" -I"C:\Pro
gram Files (x86)\Microsoft Visual Studio 9.0\VC\include" -I"C:\Program Files (x8
6)\Microsoft SDKs\Windows\v7.0A\include" -c -DBCCWIN -DDAVE_LITTLE_ENDIAN -TC -D
DOEXPORT nodave.c
NMAKE : fatal error U1077: ""C:\Program Files (x86)\Microsoft Visual Studio 9.0\
VC\bin\cl.EXE"": Rückgabe-Code "0xc0000135"
Stop.

vcwinmake1.bat gibt mir allerdings auch dieses aus:
G:\Downloads\libnodave\libnodave>"G:\Program Files (x86)\Microsoft Visual Studio
10.0\VC\vcvarsall.bat"
Setting environment for using Microsoft Visual Studio 2010 x86 tools.
\PKWARE\pkzipc";C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\P
rogram Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL
Server\100\DTS\Binn\" was unexpected at this time.

Was stimmt jetzt schon wieder nicht?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
VCPATH=d:\programme\microsoft visual C++ Toolkit 2003
SDKPATH=d:\programme\microsoft platform sdk

VCPATH=G:\Program Files (x86)\Microsoft Visual Studio 10.0\VC
SDKPATH=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A

Also die letzten beiden Zeilen passen zu meinem System, habe ich angepasst.
Allerdings kann ich für die ersten beiden Zeilen keine passenden Einträge finden.

Muss ich die noch installieren?
 
Scheint auch nicht zu funktionieren. Bekomme immer noch den gleichen Fehler.

Hab jetzt in einem anderen Forum gelesen:

I got this error when I am using a 32 bit lib.
I resolved this by setting the environment variable "lib" to point to a 64 bit lib dir as below.​
C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib\x64​
set lib=C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib\x64;your/other/lib​
hope this helps.​

Ich benutze auch ein win7 64 Bit. Wo muss ich dann den oben genannten Befehl einfügen um es auszuprobieren?

In den gleichen Forum wurde auch betont das vcvarsall.bat vorher ausgeführt werden muss. Aber das habe ich ja mit vcwinmake1.bat erledigt.
 
Unter Win64 hab Ich keine Erfahrung. Willst du den eine 64Bit Lib oder 32 Bit?

Bei

VCPATH=G:\Program Files (x86)\Microsoft Visual Studio 10.0\VC
SDKPATH=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A

sind nur die letzten 2 Interessant, die ersten werden davon überschrieben (hab die nur nicht rausgelöscht!)
 
Zurück
Oben