PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kompileiren macht ständig Probleme



Seiten : [1] 2

Kloppke
17.02.04, 20:52
Hab (dank Debian) noch nix kompilieren müssen, will jetzt aber z.B: Nomad Utils (für mp3player) und Neverball (Game) kompilieren. Leider haut das bei beidem nich hin :/ Die fehlermeldungen sgaen mit leider auch nix:

Nomad Utils:
gcc -Wall -Wreturn-type -DWITH_USBDEVFS -O2 -c -o low_level.o low_level.c
low_level.c: In Funktion »nomadII_ctl_msg«:
low_level.c:323: error: structure has no member named `requesttype'
low_level.c:324: error: structure has no member named `request'
low_level.c:325: error: structure has no member named `value'
low_level.c:326: error: structure has no member named `index'
low_level.c:327: error: structure has no member named `length'
make[1]: *** [low_level.o] Fehler 1
make[1]: Leaving directory `/home/jojo/Downloads/Programme/Nomad2-Utils/libnomadII'
make: *** [recurse-all] Fehler 2

Neverball leider schon gelöscht :/ Muss ich später nochma probiern, aber wär schonma schön wenn mir jemand hier beim kompiliern helfen kann, hab damit noch nich wirklich viel erfahrung gemacht :(

drcux
17.02.04, 23:06
der eigentlich Fehler ist schon früher aufgetreten, poste mal das komplette "make"

derguteweka
18.02.04, 19:06
Moin,

Sieht so aus, als ob beim compilieren nicht der richtige Include-Pfad gesetzt wird.
der gcc kann mit einem struct nix anfangen, weil die definition dieses structs in einem headerfile steht, dass nicht includiert wird. Musste mal ins Makefile der nomad-utils gucken (gruuusel :-) ) und mal schauen, wie der gcc aufgerufen wird. in der version 0.8 der nomad-utils stehen z.b. im Makefile (an verschiedenen Stellen) diese Zeilen, die das bewirken:

NOMADLIBINC=./libnomadII

und:
CFLAGS = -Wall -Wreturn-type -I $(NOMADLIBINC) -DVERSION='"$(VERSION)"'

Bei deinem gcc aufruf fehlt sowas wie -I ./libnomadII
Welche Version versuchst du denn eigentlich zu bauen ?

Gruss
WK

Kloppke
18.02.04, 20:34
Hab ma im Makefile und hab beide von dir erwähnten dinge drin, also is ja im prinzip "-I ./libnomadII":
CFLAGS = -Wall -Wreturn-type -I $(NOMADLIBINC) -DVERSION='"$(VERSION)"'
LIBS = -L$(NOMADLIBDIR) -lnomadII

("NOMADLIBINC=./libnomadII" hab ich drin)

:/ Versuche Version 0.8 zu baun.

PS: Das war die gesamte Make ausgabe.

modn
19.02.04, 12:54
Statt mit make einfach mal mit

$ gcc -Wall -Wreturn-type -I./libnomadII -DWITH_USBDEVFS -O2 -c -o low_level.o low_level.c

probieren.
Hat bei mir manchmal geklappt.

Kloppke
19.02.04, 13:48
klappt auch nicht :(

modn
19.02.04, 14:04
Also ich habs jetzt auch mal kompiliert, obwohl ich keine Nomad Jukebox hab.
Bei mir läuft er einwandfrei durch.

Wieso installierst du eigtl. nicht das RPM-Paket?
Dann sparst du dir die Kompiliererei...

christophwth
19.02.04, 14:44
Hi

ich habe es auch mal versucht. unter debian sid kompiliert das makefile nicht einwandfrei
obwohl in private.h das struct richtig definiert ist das problem scheint das include "private.h" zu sein.
damit tut sich der compiler schwer.


gruss
christoph

derguteweka
19.02.04, 17:14
Moin,

@modn: tststs - rpms installieren kann ja jeder. Nur selber kompilieren macht gluecklich :-))

Sorry, hab gestern irgendwie die Zeilen von meinem makefile-output durcheinandergebracht. Vergesst das mit dem Includepfad, dass der gcc ohne -I aufgerufen wird, ist ok.
@Kloppke:
Hab mal n blick in die sourcen riskiert: In low_level.c wird u.a. die kernel-headerdatei usbdevice_fs.h includiert, in dieser HeaderDatei sollte die Definition fuer den struct usbdevfs_ctrltransfer stehen. Wenn die da nicht drinnensteht, kommts zu dem geschilderten Fehler bei make. Also guck' mal (mit less oder einem Texteditor) als normaler user (nicht root) in die Datei /usr/include/linux/usbdevice_fs.h In dieser Datei steht bei mir (linux-2.4.18) in Zeile 42 der anfang dieses structs. Evtl. fehlt bei dir diese Datei oder sieht ganz anders aus. Guck' ma und sach' Bescheid...
(oder wenn du keinen Bock auf Pfriemelei hast, sei ein Weichei und installier' ein rpm ;-) )

Gruss
WK

Kloppke
19.02.04, 21:47
struct ist da. Wie siehts denn der Inhalt aus ? Konnte keinen Variablentyp etc. erkennen nur so'n "_" o_O ?

Und wieso sollte ich mir RPMs installieren ? Geht das unter Debian überhaupt (also ohne RPM zu installieren) ?
Werd das eh nich machen, entweder apt-get oder selbst kompilieren ;)
Also bitte schön weiter tipps, vieleicht könnten es noch ein paar Leute mit Debian (SID) probieren ??

derguteweka
21.02.04, 17:22
Moin,

Aehm - irgendwie war mir so, als haette ich hier gestern noch was geantwortet, und jemand anderes auch...taeusch ich mich so oder habbich was !#+@$-geschrieben, was geloescht wurde ???

Gruss
WK

christophwth
21.02.04, 21:53
Hi

du täuscht dich nicht. ich habe auch noch etwas dazu geschrieben.
aber das forum hatte gestern wohl massive datenbankprobleme (bis der beitrag erschien dauerte es 5 min )

hier noch mal das was ich gestern posten wollte:

für libnomadi gilt:
wenn im Makefile die option WITH_USBDEVFS=0
eingestellt ist kompiliert make ohne probleme

so schaut der entsprechende teil aus


#ifndef WITH_USBDEVFS
/************************************************** *
* low level driver
*/
#define NOMADII_SEND_COMMAND 0x1
#define NOMADII_RECV_COMMAND 0x2
#define NOMADII_ASYNC_COMMAND 0x3
#define NOMADII_ASYNC_COMPLETE 0x4
#define NOMADII_RESET_PIPES 0x5

struct NomadII_cmd {
short length;
int request;
int requesttype;
int value;
int index;
void *data;
int timeout;
};
#endif


wird die usbdevfs funktionalität benötigt ?


auch nomadII-utils-0.8 kompilieren ohne die USBDEVFS option problemlos!


gruss
christoph

Kloppke
22.02.04, 12:17
Is ja noch schöner:

make[1]: Leaving directory `/home/jojo/Downloads/Programme/Nomad2-Utils/libnomadII'
gcc -Wall -Wreturn-type -I ./libnomadII -DVERSION='"0.8"' -DUSE_READLINE -O2 -c -o nomadii.o nomadii.c
nomadii.c:32:31: readline/readline.h: Datei oder Verzeichnis nicht gefunden
nomadii.c:33:30: readline/history.h: Datei oder Verzeichnis nicht gefunden
nomadii.c: In Funktion »main«:
nomadii.c:124: error: `rl_terminal_name' undeclared (first use in this function)
nomadii.c:124: error: (Each undeclared identifier is reported only once
nomadii.c:124: error: for each function it appears in.)
nomadii.c: In Funktion »get_input_line«:
nomadii.c:501: error: `rl_inhibit_completion' undeclared (first use in this function)
nomadii.c:502: Warnung: implicit declaration of function `readline'
nomadii.c:502: Warnung: Initialisierung erzeugt Zeiger von Ganzzahl ohne Typkonvertierung
nomadii.c:506: Warnung: implicit declaration of function `add_history'
nomadii.c: In Funktion »cmdscanner«:
nomadii.c:537: error: `rl_filename_quote_characters' undeclared (first use in this function)
make: *** [nomadii.o] Fehler 1

Habt ihr die genannten Dateien ? o_O

christophwth
22.02.04, 16:28
Hi

bei debian wäre das libreadline4-dev

gruss
christoph

Kloppke
22.02.04, 19:41
danke jetzt konnt ichs kompilieren und installieren, aber beim aufruf von "nomadii" kommt foglendes:
Error: Unable to find any Creative Nomad II devices

Wird wahrshcienlich an "WITH_USBDEVFS=0" liegen :( wenn ichs auf 1 (Standard) setze, kompiliert er aber nicht (fehler s.o.) :(

derguteweka
22.02.04, 21:07
Moin,

IMHO liegt der Hund irgendwo bei den kernel-headern begraben. Hab' das Ding derweilen mal auf meinem 486er (2.6.3er Kernel, 2.4.20er Kernel-header, glibc-3.2.3, gcc-3.3.1) versucht zu bauen, dort meckert er zwar spaeter wg. dem fehlenden readline, aber der von dir beschriebene Fehler beim make tritt definitiv nicht auf. Hier nochmal was in meiner /usr/include/linux/usbdevice_fs.h ziemlich am Anfang steht:

#define USBDEVICE_SUPER_MAGIC 0x9fa2

/* usbdevfs ioctl codes */

struct usbdevfs_ctrltransfer {
__u8 requesttype;
__u8 request;
__u16 value;
__u16 index;
__u16 length;
__u32 timeout; /* in milliseconds */
void *data;
};

struct usbdevfs_bulktransfer {
unsigned int ep;
....
usw.bla.

Bei dir auch ?

Ach ja, die komischen Variablentypen wie __u8 sind in /usr/include/linux/types.h definiert...

Gruss
WK

christophwth
24.02.04, 21:32
HI

stimmt, das problem liegt in /usr/include/linux/usbdevice_fs.h unter gentoo funktioniert das kompilieren
auch problemlos und ein blick in die usbdevice_fs.h zeigt doch erhebliche abweichungen zur bestehenden
usbdevice_fs.h in debian.

hauptsächlich sind tatsächlich andere namen im stuct verwendet
hier der diff output von diff debianfile gentoofile


34d33
< #include <linux/compiler.h>
44,48c43,47
< __u8 bRequestType;
< __u8 bRequest;
< __u16 wValue;
< __u16 wIndex;
< __u16 wLength;
---
> __u8 requesttype;
> __u8 request;
> __u16 value;
> __u16 index;
> __u16 length;
50c49
< void __user *data;
---
> void *data;
57c56
< void __user *data;
---
> void *data;
82c81
< #define USBDEVFS_URB_SHORT_NOT_OK 1
---
> #define USBDEVFS_URB_DISABLE_SPD 1
83a83
> #define USBDEVFS_URB_QUEUE_BULK 0x10
101c101
< void __user *buffer;
---
> void *buffer;
112c112
< /* ioctls for talking directly to drivers */
---
> /* ioctls for talking to drivers in the usbcore module: */
117c117
< void __user *data; /* param buffer (in, or out) */
---
> void *data; /* param buffer (in, or out) */
145,146d144
< #define USBDEVFS_DISCONNECT _IO('U', 22)
< #define USBDEVFS_CONNECT _IO('U', 23)
154a153,163
> /*
> * inode number macros
> */
> #define ITYPE(x) ((x)&(0xf<<28))
> #define ISPECIAL (0<<28)
> #define IBUS (1<<28)
> #define IDEVICE (2<<28)
> #define IBUSNR(x) (((x)>>8)&0xff)
> #define IDEVNR(x) ((x)&0xff)
>
> #define IROOT 1


gruss
christoph

derguteweka
25.02.04, 07:51
Moin,

Na, dassja Kacke, dass Debian da sein eigenes Sueppchen kocht. Wie kann Kloppke das am besten umschiffen ? Seine Nomad-tools patchen, damit die sich nicht mehr mit den Debianheadern in die Haare kommen ?

Gruss
WK

Kloppke
25.02.04, 13:06
So siehts bei mir aus:

#define USBDEVICE_SUPER_MAGIC 0x9fa2

/* usbdevfs ioctl codes */

struct usbdevfs_ctrltransfer {
__u8 bRequestType;
__u8 bRequest;
__u16 wValue;
__u16 wIndex;
__u16 wLength;
__u32 timeout; /* in milliseconds */
void __user *data;
};


:(

zander
25.02.04, 13:25
Debian kocht kein eigenes Süppchen, sondern benutzt Linux 2.6 Kernelheader; die Namen der Felder der usbdevfs_ctrltransfer Struktur wurden geändert.

christophwth
25.02.04, 14:07
Hi
@zander , sind das die einzigen wichtigen änderungen ?
oder sind änderungen wie
void *data; /* param buffer (in, or out) */ zu void __user *data; /* param buffer (in, or out) */

nur für den entsprechenden teil wirksam der auch __user nutzt

wenn das so ist müssten durch änderungen im Makefile und in den quellen sich die sourcen
auch mit diesem header übersetzen lassen ?

gruss
christoph

Kloppke
25.02.04, 17:14
hab aber keinen 2.6er drauf, oder meinteste die haben das schon bei früheren benutzt ? O_O
Wer hat denn hier alles Debian, hats mal jemand versucht zu kompiliern ?

zander
25.02.04, 17:32
Das __user hat hier keine funktionalen Auswirkungen (siehe linux/include/linux/compiler.h); ich schätze die einfachste Lösung hier dürfte sein, die Namen der Felder in den Quellen den neuen Gegebenheiten anzupassen (besser wäre es auf Dauer vermutlich, die Anwendung auf libusb umzustellen).

Kloppke
26.02.04, 14:15
lol, is echt voll einfach :/ Danke Zander, musste eifnach nur die Namen austauschen o_O ;)

Mist, kommt aber wieder diese meldung beim ausführen:
Error: Unable to find any Creative Nomad II devices

An was kann das liegen ? Meine USB Mouse läuft z.B. auch, und hab auch full HID Support :(

zander
26.02.04, 14:21
Das kann ich Dir nicht sagen, ich kenne das Programm nicht; hat Dein Gerät die erwartete ID?

Kloppke
26.02.04, 16:15
Wie kann ich das herausfinden ? Der Player selber zeigt an dass er angeschlossen ist.
Bei Mandrake hab ich ihn einfach angeschlossen Nomad Utils isntalliert unds lief, muss ich ihn vieleicht irgendwie mounten oder sowas ?? :/

zander
26.02.04, 16:40
Wenn Du das Gerät als Massenspeicher einbinden könntest bräuchtest Du keine besonderen Werkzeuge. ;) Gibt es für diese Nomad utilities keine mailing lists oder ähnliches?

Kloppke
26.02.04, 19:25
Wüsst ich nix :(
nomadii.sourceforge.net
:((

derguteweka
27.02.04, 07:21
Moin,

Na, wenns nich' geht, dann halt die ueblichen Fragen:

Was liefern z.B. :

less /proc/bus/usb/devices
less /proc/bus/usb/drivers
mount

denn so fuer Ergebnisse ?

Gruss
WK

zander
27.02.04, 11:41
Die Datei /proc/bus/usb/devices ist dabei von Interesse, da sie von den Nomad Werkzeugen benutzt wird um festzustellen, ob ein kompatibles Gerät präsent ist; so sucht nomadII_probe (libnomadII/data.c) nach einem USB Gerät mit der ID 041E:1002 oder 041E:4004 (jeweils vendor:device).