Forum: Compiler & IDEs Fehler beim kompilieren von avrdude


von Klaus L. (kllei)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Klaus L. (kllei)


Lesenswert?

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

von Klaus L. (kllei)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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

von Klaus L. (kllei)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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).

von Klaus L. (kllei)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ich kann dir höchstens anbieten, dass ich dir einen gebootstrappten
(schlimmes Wort) Tarball irgendwo hin lege, sodass du kein automake
brauchst.

von Klaus L. (kllei)


Lesenswert?

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!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

You have new mail.

von Klaus L. (kllei)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Klaus L. (kllei)


Lesenswert?

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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. :)

von Klaus L. (kllei)


Lesenswert?

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
Noch kein Account? Hier anmelden.