Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 6 von 6

Thema: libnodave mit DevC++ kompilieren

  1. #1
    Registriert seit
    29.03.2004
    Beiträge
    5.731
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich versuche gerade das Beispielprogramm "testISO_TCP" von Libnodave mit dem DevC++ Kompiler zu übersetzen.
    Jetzt bekomme ich beim übersetzen jedoch einige Fehlermeldungen:

    1) In der nodave.h bekomme ich mehrere Syntaxfehler z.B. bei "EXPORTSPEC" und "DECL2" die nirgends definiert wurden.

    2) In der opensocket.c werden mehrere Header includiert, z.B. netdb.h etc. die es bei meinem System nicht gibt. Soweit ich das gesehen habe sollen die Funktionen daraus in der winsock.h vorhanden sein. Da die Sourcen ja mit dem VC++ übersetzbar sein sollen, müssen die Dateien bei DevC++ anscheinend fehlen, oder nicht? Ein bedingtes unkludieren je nach Umgebung existiert ja nicht (die libwsock32.a ist dem Projekt hinzugefügt).

    Vielleicht führt das hier im SPS-Forum zu weit, aber evtl. hat das ja schonmal jemand erfolgreich mit diesem Kompiler getestet,

    Gruß
    Thomas
    Zitieren Zitieren libnodave mit DevC++ kompilieren  

  2. #2
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Ich denke nicht das es an Devc++ oder dem Mingw32 liegt.
    Ich benutze auch DevCpp aber nur mit WinAVR und ohne Mingw32 folglich habe ich auch libnodave noch nicht mit dem Mingw32 ausprobiert.
    Wie sehen denn deine Projekteinstellungen aus hast Du mal ein Visual-Studio Projekt importiert? Das kann der DevCpp meines Wissens nach.
    If you open your Mind too much, your Brain will fall out.

  3. #3
    Avatar von Thomas_v2.1
    Thomas_v2.1 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.03.2004
    Beiträge
    5.731
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Hallo,
    ein Visual-Projekt importieren kann ich ja nicht, hab keins. Das Makefile das bei libnodave dabei ist gilt ja auch zum erstellen der DLL, ich möchte die aber nur verwenden.
    Aber rein für die testISO_TCP sieht mein Makefile eigentlich gleich aus, bis auf dass ich die libnodave.lib beim Linken angegeben habe.
    Das Hauptproblem scheinen die nicht bekannten Bezeichner in der nodave.h zu sein (EXPORTSPEC, DECL2), und halt die nicht vorhandenen Headerfiles. Evtl. könnte man das zwar alles im Quelltext zurechtbiegen, aber ich denke nicht dass es vom Urheber mal so gedacht war sondern irgendwo an meinen Einstellungen liegt (Fehler sitzt vor der Tastatur

    Anbei mal mein Makefile:
    Code:
    # Project: daveISO_on_TCP
    # Makefile created by Dev-C++ 4.9.9.2
    
    CPP  = g++.exe
    CC   = gcc.exe
    WINDRES = windres.exe
    RES  = 
    OBJ  = testISO_TCP.obj openSocket.obj $(RES)
    LINKOBJ  = testISO_TCP.obj openSocket.obj $(RES)
    LIBS =  -L"D:/Dev-Cpp/lib" libnodave.lib ../../Dev-Cpp/lib/libwsock32.a  
    INCS =  -I"D:/Dev-Cpp/include" 
    CXXINCS =  -I"D:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include"  -I"D:/Dev-Cpp/include/c++/3.4.2/backward"  -I"D:/Dev-Cpp/include/c++/3.4.2/mingw32"  -I"D:/Dev-Cpp/include/c++/3.4.2"  -I"D:/Dev-Cpp/include"  -I"D:/Dev-Cpp/include/wx/msw"  -I"D:/Dev-Cpp/include/wx/generic"  -I"D:/Dev-Cpp/include/wx/animate"  -I"D:/Dev-Cpp/include/wx/fl"  -I"D:/Dev-Cpp/include/wx/gizmos"  -I"D:/Dev-Cpp/include/wx/html"  -I"D:/Dev-Cpp/include/wx/mmedia"  -I"D:/Dev-Cpp/include/wx/net"  -I"D:/Dev-Cpp/include/wx/ogl"  -I"D:/Dev-Cpp/include/wx/plot"  -I"D:/Dev-Cpp/include/wx/protocol"  -I"D:/Dev-Cpp/include/wx/stc"  -I"D:/Dev-Cpp/include/wx/svg"  -I"D:/Dev-Cpp/include/wx/xml"  -I"D:/Dev-Cpp/include/wx/xrc"  -I"D:/Dev-Cpp/include/wx" 
    BIN  = daveISO_on_TCP.exe
    CXXFLAGS = $(CXXINCS) 
    CFLAGS = $(INCS) 
    RM = rm -f
    
    .PHONY: all all-before all-after clean clean-custom
    
    all: all-before daveISO_on_TCP.exe all-after
    
    
    clean: clean-custom
    clean: 
        $(RM) $(OBJ) $(BIN)
    
    $(BIN): $(OBJ)
        $(CC) $(LINKOBJ) -o "daveISO_on_TCP.exe" $(LIBS)
    
    testISO_TCP.obj: testISO_TCP.c
        $(CC) -c testISO_TCP.c -o testISO_TCP.obj $(CFLAGS)
    
    openSocket.obj: openSocket.c
        $(CC) -c openSocket.c -o openSocket.obj $(CFLAGS)

  4. #4
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Hallo,
    ich versuche gerade das Beispielprogramm "testISO_TCP" von Libnodave mit dem DevC++ Kompiler zu übersetzen.
    Jetzt bekomme ich beim übersetzen jedoch einige Fehlermeldungen:
    Deine Probleme stammen daher, daß der Code von libnodave so geschrieben ist, daß er für mehrere Zielsysteme übersetzt werden kann (Win32, Linux, Linux-ARM). Bei der Kompilierung muß das Zielsystem und die "Endianness" der Zielmaschine definiert werden, für Windows und i386:
    -DBCCWIN -DDAVE_LITTLE_ENDIAN
    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    1) In der nodave.h bekomme ich mehrere Syntaxfehler z.B. bei "EXPORTSPEC" und "DECL2" die nirgends definiert wurden.
    Diese Deklarationen werden durch BCCWIN oder LINUX passend definiert (hier ein Teil davon):

    #ifdef BCCWIN
    #ifdef DOEXPORT
    #define EXPORTSPEC __declspec (dllexport)
    #else
    #define EXPORTSPEC __declspec (dllimport)
    #endif
    #endif

    #ifdef LINUX
    #define EXPORTSPEC
    #define DECL2
    #endif

    2) In der opensocket.c werden mehrere Header includiert, z.B. netdb.h etc. die es bei meinem System nicht gibt.
    Für welches System willst du es kompilieren?
    [quote]
    Soweit ich das gesehen habe sollen die Funktionen daraus in der winsock.h vorhanden sein.
    [quote]
    Wenn es Windows ist...bei CE kenne ich mich nicht aus. Aber wenn dein noch so exotisches System TCP/IP kann, wird es eine Funktion zum Öffnen der Sockets geben und eine Header-Datei, wo diese Funktion bekannt gemacht wird. Du solltest dann der nodave.h bzw openSocket.h einen bedingten Block hinzufügen:

    #ifdef MYEXOTICSYSTEM
    #include <something_like_stdio.h>
    #include <whatever_defines_open_for_sockets.h>
    #define DECL2 // nix
    #define EXPORTSPEC // nix
    typedef struct dost {
    <TypeToReferToASerialConnectionWhenReadingFromIt> rfd;
    <TypeToReferToASerialConnectionWhenWritingToIt> wfd;
    } _daveOSserialType;
    #define tmotype <TypeRepresentingTime>
    #define OS_KNOWN
    #endif
    Da die Sourcen ja mit dem VC++ übersetzbar sein sollen,...
    Übersetzt wurden, oder wo kommt die DLL her?
    .. müssen die Dateien bei DevC++ anscheinend fehlen, oder nicht? Ein bedingtes unkludieren je nach Umgebung existiert ja nicht..
    inkludieren? Doch, genau das existiert. Eine Datei wie winsock.h gehört m.E. zum Betriebssystem, nicht zum Compiler.

  5. #5
    Avatar von Thomas_v2.1
    Thomas_v2.1 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.03.2004
    Beiträge
    5.731
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Danke Zottel für deine Ausführungen. Mittlerweile habe ich es hinbekommen das Testprogramm mit dem devcpp zu übersetzen.
    Dabei habe ich wie du beschrieben hast die defines für DECL2 und EXPORTSPEC (einfacherweise) im BCCWIN-Bereich ersetzt.
    Bei den Compileroptionen muss dann beim devcpp auch -DBCCWIN -DDAVE_LITTLE_ENDIAN mit angegeben werden. Wenn dann noch die libwsock32.a aus dem DevCpp/lib Verzeichnis dem Linker mit angegeben wird funktioniert es.

    Ich habe es zwischendurch mal mit den Borland Kommandozeilen-Tools probiert, bei diesem konnte ich es auf Anhieb ohne Änderungen übersetzen.
    Warum man die Zeilen bei diesem nicht ändern muss ich mir nicht ganz klar. Ich habe die nodave-Funktionen da ja auch statisch gelinkt.

  6. #6
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Danke Zottel für deine Ausführungen. Mittlerweile habe ich es hinbekommen das Testprogramm mit dem devcpp zu übersetzen.
    Dabei habe ich wie du beschrieben hast die defines für DECL2 und EXPORTSPEC (einfacherweise) im BCCWIN-Bereich ersetzt.
    Bei den Compileroptionen muss dann beim devcpp auch -DBCCWIN -DDAVE_LITTLE_ENDIAN mit angegeben werden.
    Für eines der TESTPROGRAMME muß die Angabe von -DBCCWIN -DDAVE_LITTLE_ENDIAN reichen.
    EXPORTSPEC interessiert nur beim Übersetzen der .DLL selbst: durch die Definition -DDOEXPORT bewirkt, das EXPORTSPEC durch __declspec (dllexport) ersetzt wird. Ohne diese Definition wird es durch __declspec (dllimport) ersetzt. Die entstehenden Object files werden zum Linken der .DLL benutzt aber auch statisch zu den Testprogrammen gelinkt. Der Linker gibt dann eine Menge Warnungen aus: "locally defined symbol xxx imported in function main" aber das Ergebnis funktioniert problemlos.
    Wenn dann noch die libwsock32.a aus dem DevCpp/lib Verzeichnis dem Linker mit angegeben wird funktioniert es.
    Weiß jetzt nicht, wie das bei devcpp ist, aber unter Linux sind Bibliotheken mit der Endung .a zum statischen Linken bestimmt und das entstehende Programm nimmt den kopletten Code auf, anstatt ihn mit anderen Programmen zu teilen.
    Warum man die Zeilen bei diesem nicht ändern muss ich mir nicht ganz klar. Ich habe die nodave-Funktionen da ja auch statisch gelinkt.
    Man sollte nichts ändern müssen, es sei denn DevCpp verwendet andere Schlüsselworte für export und import.
    Aber sei es, wie es sei, es freut mich, daß du weitergekommen bist.

Ähnliche Themen

  1. Libnodave auf 64Bit kompilieren???
    Von trolly70 im Forum Hochsprachen - OPC
    Antworten: 63
    Letzter Beitrag: 04.03.2012, 23:01
  2. Antworten: 0
    Letzter Beitrag: 09.09.2010, 00:27
  3. LibNoDave unter VB.Net ohne libnodave.net.dll
    Von Earny im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 09.03.2010, 18:57
  4. S7-Programm übersetzen/kompilieren?
    Von SPSstudent im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 16.12.2009, 00:40
  5. Antworten: 5
    Letzter Beitrag: 22.11.2006, 21:26

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •