Hallo Experten, ich versuche gerade avrdude aus den Sourcen zu kompilieren. Umgebung: WinXp, cygwin (gerade auf die neueste Version upgedated, ) ./configure geht, make bringt den Fehler: bison -y -d config_gram.y config_gram.y:5.1: invalid character: '<' config_gram.y:5.2: invalid character: '!' config_gram.y:5.3-9: syntax error, unexpected identifier bison versteht also offenbar den Header der Daei nicht??? Ich habe bison daraufhin per cygwin update reinstalliert, gleiches ergebnis. bison -V bison |GNU Bison| 2.3 Was stimmt noch nicht? brauche ich irgendwelche Libraries neu? Vielen Dank für Eure Tipps. Grüße, Klaus
Klaus Leidinger wrote: > Hallo Experten, Bleib doch lieber auf avrdude-dev, wenn du die Experten für avrdude haben willst. ;-) > bison -y -d config_gram.y > config_gram.y:5.1: invalid character: '<' > config_gram.y:5.2: invalid character: '!' > config_gram.y:5.3-9: syntax error, unexpected identifier Seltsam, diese Zeichen befinden sich bei mir nicht auf Zeile 5, sondern da steht Leerzeichen, Stern, Newline. Die Fehlermeldung sieht mir so aus, als würde da ein HTML-Kommentar stehen (<!...). Kannst du mal die ersten 10 Zeilen von config_gram.y posten? AVRDUDE sollte übrigens auch komplett in MinGW bauen, der braucht kein Cygwin.
Jörg Wunsch wrote: > Bleib doch lieber auf avrdude-dev, wenn du die Experten für > avrdude haben willst. ;-) Na Du bist doch da ;-) ich dachte aber eher an einen Fehler in meiner cygwin konfig... >> bison -y -d config_gram.y >> config_gram.y:5.1: invalid character: '<' >> config_gram.y:5.2: invalid character: '!' >> config_gram.y:5.3-9: syntax error, unexpected identifier > > Seltsam, diese Zeichen befinden sich bei mir nicht auf Zeile > 5, sondern da steht Leerzeichen, Stern, Newline. > > Die Fehlermeldung sieht mir so aus, als würde da ein HTML-Kommentar > stehen (<!...). Ja, genau, jetzt wo es Dir auch komisch vorkommt habe ich es nochmal mit dem File vom SVC verglichen (ich D**p, ich dachte das html Format wird schon stimmen) Ich hatte mir die neueren Files runtergeladen und dabei wohl den falschen Link geklickt (das logfile)... Jetzt habe ich mal die V5.5 aus dem tar file direkt probiert (hätte ich natürlich gleich machen sollen) Also das mit der config_gram Datei ist jetzt weg ;-) Sorry, hab schon länger kein "make" mehr eingegeben... In der original 5.5 bekomme ich nun Fehler bei der libusb bzw. usbasp: usbasp.c:42:17: usb.h: no such file or directory und dann noch ein paar Folgefehler die libusb von cygwin habe ich installiert, hast Du da eine Idee was fehlt? > AVRDUDE sollte übrigens auch komplett in MinGW bauen, der braucht > kein Cygwin. OK, dann hole ich mir das auch mal auf meinen Rechner, ich bin ja lernwillig ;-) Vielen Dank und Grüße, Klaus
Klaus Leidinger wrote: > In der original 5.5 bekomme ich nun Fehler bei der libusb bzw. usbasp: > > usbasp.c:42:17: usb.h: no such file or directory > und dann noch ein paar Folgefehler > > die libusb von cygwin habe ich installiert, hast Du da eine Idee was > fehlt? Lesen bildet, ich hole mir mal die beschriebene usb lib von sourceforge und probiere es damit. Ciao, Klaus
Klaus Leidinger wrote: > Also das mit der config_gram Datei ist jetzt weg ;-) :-) > usbasp.c:42:17: usb.h: no such file or directory > und dann noch ein paar Folgefehler Zwei Dinge wundern mich daran. Erstens sollte configure selbst feststellen, ob eine libusb (mitsamt Headerfile) vorhanden ist oder nicht, und sollte eigentlich usbasp nicht compilieren, wenn sie nicht gefunden worden ist:
1 | #include "usbasp.h" |
2 | |
3 | #ifdef HAVE_LIBUSB
|
4 | #include <usb.h> |
5 | |
6 | /*
|
7 | * Private data for this programmer.
|
8 | */
|
9 | struct pdata |
10 | {
|
11 | usb_dev_handle *usbhandle; |
12 | };
|
13 | |
14 | ...
|
Irgendwie muss configure also wohl eine libusb gefunden haben. Zweitens hatte ich in Erinnerung, dass das bei Cygwin relativ klaglos mit der Einbindung klappte, als ich das das letzte Mal getestet habe (schon lange her, ich mach' kein Windows). Allerdings kann es sein, dass man in der Tat die libusb-win32 installiert haben muss, damit es geht. Für MinGW muss man auf jeden Fall die libusb-win32 installiert haben, und dort muss man vor dem configure auch im Environment kund tun, wo der Compiler diese finden kann. Das geht mit
1 | export CPPFLAGS="-I/c/Programme/LibUSB-Win32-0.1.10.1/include" |
2 | export LDFLAGS=-L/c/Programme/LibUSB-Win32-0.1.10.1/lib/gcc |
Wenn man sich das ein einen Script packen will, muss man es vor dem configure "sourcen", das geht mit dem Punkt-Kommando der Shell:
1 | . avrdude-env.sh |
So, hab noch mal die installierten Versionen geprüft: libusb 1.12.1-2 ist in cygwin installiert, das ist die neueste Version die ich gefunden hatte. Daher auch das automatische compilieren. getestet habe ich ihn mal mit dem mitgelieferten testlibusb-win und das scheint zu funktionieren. Ich habe eine usb.h in /usr/include und die habe ich ins avrdude directory kopiert, dann ist der Fehler auch weg. Aber /usr/include müsste doch im Pfad sein? Jetzt findet allerdings der Linker die -lusb nicht ... Argh, das kann ja nur eine Pfad Geschichte sein. welches File sucht er denn? ich dachte libusb.a, finde ich aber nicht, ich finde nur eine libusb.dll.a Kann ich den usbasp Teil komplett rauslassen? Danke für Deine Hilfe, ich bin beim Compilieren etwas aus der Übung was Makefiles angeht... Grüße, Klaus
Klaus Leidinger wrote: > Ich habe eine usb.h in /usr/include und die habe ich ins avrdude > directory kopiert, dann ist der Fehler auch weg. Das sollte allerdings nicht nötig sein. In /usr/include sollte der Compiler sie immer finden. Füg doch mal ein -v in die Kommandozeile des Compilers ein, dann sagt er dir, wo er überall sucht. > Jetzt findet allerdings der Linker die -lusb nicht ... Auch hier müsste -v helfen. Ich habe ein wenig den Verdacht, dein $PATH stimmt nicht und du nimmst einen Compiler, der nicht von/für Cygwin ist. > welches File sucht er denn? ich dachte libusb.a, finde ich aber nicht, > ich finde nur eine libusb.dll.a Das kann gut sein, dass die einen derartigen Suffix benutzen wollen. > Kann ich den usbasp Teil komplett rauslassen? Eine configure-Option --without-usb oder so gibt es nicht. Du kannst aber nach dem configure in ac_cfg.h das HAVE_LIBUSB auskommentieren, dann wird jeglicher USB-Support nicht reincompiliert (just so, als wenn du keine libusb installiert hättest).
Jörg Wunsch wrote: > Klaus Leidinger wrote: > >> Jetzt findet allerdings der Linker die -lusb nicht ... > > Auch hier müsste -v helfen. > > Ich habe ein wenig den Verdacht, dein $PATH stimmt nicht und du > nimmst einen Compiler, der nicht von/für Cygwin ist. Ja, sieht so aus. Vielleicht liegt es an der Reihenfolge von winavr und cygwin installation. Mal sehen ob mich das -v schlauer macht. > >> Kann ich den usbasp Teil komplett rauslassen? > > Eine configure-Option --without-usb oder so gibt es nicht. Du kannst > aber nach dem configure in ac_cfg.h das HAVE_LIBUSB auskommentieren, > dann wird jeglicher USB-Support nicht reincompiliert (just so, als > wenn du keine libusb installiert hättest). Ok, ich habs jetzt andersrum gemacht (usblib rausgeschmissen) make geht jetzt für die standart V5.5 :) Dann habe ich mit per cvs die neuen sourcen geholt (per Mausclick waren ja cp die html Statements drin). Jetzt meckert aber der automake... Irgendwie kam mir das früher einfacher vor ;-) Ich hab das letzte mal avrdude bei Version 4.2 oder so selbst compiliert (unter Linux und cygwin) Dann noch mal das komplette directory vom CVS und die Version 5.5 damit überbügelt... jetzt hängt der make bei "creating avrdude.conf.tmp" Anscheinend hat sich da seint der V5.5 einiges geändert? make startet jetzt mit einem config.status --recheck Gibt es noch einen Trick? nur das austauschen der avr910.h und .c ging auch nicht... Vielen Dank für Deine Geduld. Grüße, Klaus
Ich kann dir höchstens anbieten, dass ich dir einen gebootstrappten (schlimmes Wort) Tarball irgendwo hin lege, sodass du kein automake brauchst.
Hallo Jörg, ja, ich glaube das wäre nicht schlecht, mir gehen langsam die Ideen aus ;-) Kannst Du den per mail schicken? ansonsten schick mir den Link dahin. Ich bin auch bei nongnu als User angemeldet. Danke!
ja, compilieren klappt :) Vielen Dnak, jetzt komme ich endlich zum testen des avr910 Modes... Kann es sein, das das kompilieren unter cygwin gar nicht getestet ist? Im Makefile steht auch direkt etwas von -lusb drin, möglicherweise macht das auch schon probleme bei cygwin. Sollte ich da mal Thomas Fischl fragen? Der müsste ja einige usb erfahrung haben ;-) Vielen Dank, ich melde mich nach den Tests noch mal im anderen Thread. Grüße, Klaus
Klaus Leidinger wrote:
> Kann es sein, das das kompilieren unter cygwin gar nicht getestet ist?
Ich habe es zumindest vor einiger Zeit mal in einer VMware getestet.
...
...
Habe es eben nochmal probiert. Ja, jetzt wird mir das langsam klarer,
was dort wie (nicht) funktioniert. Da ist in den Compileroptionen ein
-mno-cygwin drin, das bedeutet laut --target-help, dass er statt des
Cygwin-APIs das MinGW-API benutzt. Damit kann aber die libusb von
Cygwin nicht genutzt werden. Dummerweise haben die Tests in configure
diese Option nicht und finden daher deine Cygwin-libusb, während der
eigentliche Compiliervorgang sie dann nicht mehr findet.
Wenn du obige Environment-Variablen (für deine libusb-win32-Version
angepasst) in der Cygwin-Shell abkippst, dann geht es fast. Es hat
mich noch ein Weilchen gekostet um rauszufinden, dass da irgendein
Trollo in einem der Cygwin- oder MinGW-Header offensichtlich sowas wie
#define interface struct
stehen haben muss. :-o Nun heißt eine der Komponenten in den tief
verschachtelten libusb-Datenstrukturen aber "interface"...
Du brauchst also noch folgenden Patch:
1 | Index: usb_libusb.c
|
2 | ===================================================================
|
3 | RCS file: /sources/avrdude/avrdude/usb_libusb.c,v
|
4 | retrieving revision 1.12
|
5 | diff -u -u -r1.12 usb_libusb.c
|
6 | --- usb_libusb.c 14 Mar 2008 13:00:07 -0000 1.12
|
7 | +++ usb_libusb.c 25 Mar 2008 16:34:01 -0000
|
8 | @@ -42,6 +42,11 @@
|
9 | #include "serial.h" |
10 | #include "usbdevs.h" |
11 | |
12 | +#if defined(WIN32NATIVE)
|
13 | +/* someone has defined "interface" to "struct" in Cygwin */
|
14 | +# undef interface
|
15 | +#endif
|
16 | +
|
17 | static char usbbuf[USBDEV_MAX_XFER]; |
18 | static int buflen = -1, bufptr; |
damit bekomme ich es (mit den genannten Environmentvariablen) dann
compiliert.
> Im Makefile steht auch direkt etwas von -lusb drin, ...
Ja, das ist auch noch eine Folge dessen, dass das configure die libusb
ja gefunden hatte.
Jörg Wunsch wrote: > Habe es eben nochmal probiert. Ja, jetzt wird mir das langsam klarer, > was dort wie (nicht) funktioniert. Da ist in den Compileroptionen ein > -mno-cygwin drin, das bedeutet laut --target-help, dass er statt des > Cygwin-APIs das MinGW-API benutzt. Damit kann aber die libusb von > Cygwin nicht genutzt werden. Dummerweise haben die Tests in configure > diese Option nicht und finden daher deine Cygwin-libusb, während der > eigentliche Compiliervorgang sie dann nicht mehr findet. Aha, das MinGW im Pfad hatte ich gesehen, es aber in Zusammenhang mit meiner möglicherweise "unsauberen" Installation gesehen. MinGW ist auch als default in der cygwin installation mit drin, ich versuche es mal da rauszuschmeissen... > Du brauchst also noch folgenden Patch: < ... > damit bekomme ich es (mit den genannten Environmentvariablen) dann > compiliert. > Schluck... Ich mal sehen wie ich das reinkriege... >> Im Makefile steht auch direkt etwas von -lusb drin, ... > > Ja, das ist auch noch eine Folge dessen, dass das configure die libusb > ja gefunden hatte. OK, so nach und nach wird es doch etwas klarer. Vielen Dank daß Du Dir den ganzen Kram mal anschaust, für mich ist das noch ein bischen hoch aufgehängt, und die Probleme liegen anscheinend nicht nur bei mir :) Grüße, Klaus
Klaus Leidinger wrote: > MinGW ist auch > als default in der cygwin installation mit drin, ich versuche es mal da > rauszuschmeissen... Nö, lass es drin. Das configure.ac von AVRDUDE ist so gebaut, dass es selbst unter Cygwin halt unbedingt den MinGW-Modus benutzen will. Das hat Sinn, da AVRDUDE selbst komplett native Win32-API-fähig ist (für den Fall von USB halt via libusb-win32). Damit spart man sich den Umweg über die Cygwin-Emulation und die damit verbundenen DLL-Orgien der cygwin1.dll. Das Kuriosum ist halt dabei, dass man Cygwin benutzen kann, um letztlich im MinGW-Modus zu compilieren. Der Vorteil ist, dass die Cygwin-Umgebung deutlich mehr an Tools auf der Shell-Ebene bietet als die MinGW- (bzw. dann Msys-)Umgebung. Damit ist auch klar, warum Cygwin's /usr/include/usb.h und /usr/lib/libusb.dll.a nicht funktionieren: diese sind die Cygwin- Portierungen, die das Posix-API (via cygwin1.dll) benutzen. Du brauchst daher die (separat bei sourceforge.net gepflegte) libusb-win32, die ihrerseits native auf dem Win32-API aufsetzt. Ich bin bei Windows absolut nicht zu Hause (und will es eigentlich auch nicht sein), daher brauche ich da auch ein Weilchen, diese Zusammenhänge zu verstehen. >> Du brauchst also noch folgenden Patch: > Schluck... Ich mal sehen wie ich das reinkriege... Mit "patch". Speichere den Schnipsel (oder meinen ganzen Artikel, das ist egal) mit copy&paste in eine Datei, sagen wir win32.patch, im Verzeichnis, in dem das avrdude ausgepackt ist. Dann führst du auf der Shell dort aus:
1 | patch < win32.patch |
Fertisch. :)
Jörg Wunsch wrote: > Das Kuriosum ist halt dabei, dass man Cygwin benutzen kann, um > letztlich im MinGW-Modus zu compilieren. Der Vorteil ist, dass die > Cygwin-Umgebung deutlich mehr an Tools auf der Shell-Ebene bietet > als die MinGW- (bzw. dann Msys-)Umgebung. > > Damit ist auch klar, warum Cygwin's /usr/include/usb.h und > /usr/lib/libusb.dll.a nicht funktionieren: diese sind die Cygwin- > Portierungen, die das Posix-API (via cygwin1.dll) benutzen. Du > brauchst daher die (separat bei sourceforge.net gepflegte) > libusb-win32, die ihrerseits native auf dem Win32-API aufsetzt. das ist ja gemein. So stehts auch auf der Seite von Thomas. Ich habe mich aber durch die gleiche Versionsnummer irritieren lassen. > Ich bin bei Windows absolut nicht zu Hause (und will es eigentlich > auch nicht sein), daher brauche ich da auch ein Weilchen, diese > Zusammenhänge zu verstehen. Schamlos untertrieben ;-) das war ja wirklich vertrackt! > >>> Du brauchst also noch folgenden Patch: > Mit "patch". Speichere den Schnipsel (oder meinen ganzen Artikel, > das ist egal) mit copy&paste in eine Datei, sagen wir win32.patch, > im Verzeichnis, in dem das avrdude ausgepackt ist. Dann führst du > auf der Shell dort aus: > > patch < win32.patch > > Fertisch. :) Ja, hat geklappt, danke! (er hat zwar was gesagt von ... enexpectedly ends in middle of line, aber dann succeedet. Jetzt ging auch das kompilieren des tarball mit usbasp! Super, vielen Dank! Das war ja Monstermäßiger support. Grüße, Klaus
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.