radvd compilen

lord-of-linux

Mitglied
Mitglied seit
3 Dez 2005
Beiträge
568
Punkte für Reaktionen
1
Punkte
0
Hallo Leute,

ich versuche gerade radvd für die Fritz zu compilen. Allerdings bekomme ich immer folgenden fehler:
Code:
scanner.l: In function 'yylex':
scanner.l:153: warning: passing argument 2 of 'fwrite' as unsigned due to prototype
lex.yy.c: In function 'yy_scan_string':
lex.yy.c:2150: warning: passing argument 2 of 'yy_scan_bytes' as signed due to prototype
lex.yy.c: At top level:
lex.yy.c:2223: warning: no previous prototype for 'yyget_lineno'
lex.yy.c:2232: warning: no previous prototype for 'yyget_in'
lex.yy.c:2240: warning: no previous prototype for 'yyget_out'
lex.yy.c:2248: warning: no previous prototype for 'yyget_leng'
lex.yy.c:2257: warning: no previous prototype for 'yyget_text'
lex.yy.c:2266: warning: no previous prototype for 'yyset_lineno'
lex.yy.c:2278: warning: no previous prototype for 'yyset_in'
lex.yy.c:2283: warning: no previous prototype for 'yyset_out'
lex.yy.c:2288: warning: no previous prototype for 'yyget_debug'
lex.yy.c:2293: warning: no previous prototype for 'yyset_debug'
lex.yy.c:2327: warning: no previous prototype for 'yylex_destroy'
lex.yy.c:1731: warning: 'yyunput' defined but not used
mipsel-linux-gcc  -g -O2 -Wall -Wpointer-arith  -Wcast-qual -Wcast-align -Wconversion -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -static -o radvd  log.o socket.o recv.o util.o radvd.o timer.o send.o process.o interface.o device.o device-common.o gram.o scanner.o -lfl -lc 
/home/user/ds26-15.2/toolchain/build/gcc-4.2.1-uClibc-0.9.28/mipsel-linux-uclibc/lib/gcc/mipsel-linux-uclibc/4.2.1/../../../../mipsel-linux-uclibc/bin/ld: cannot find -lfl
collect2: ld returned 1 exit status

Kann mir jemand sagen, wie ich das Problem beheben kann? (Flex-Paket ist auf meinem System)
 
Poste mal bitte Dein DS-Mod-Paket oder -Add-On, damit ich es hier auch mal laufen lassen kann.
 
Bisher habe ich noch nicht annährend ein Paket oder ein Addon. Ich versuch gerade einfach den SourceCode wie im Wiki beschrieben zu Cross-Compilen.

Den Source gibts übrigens hier: http://www.litech.org/radvd/

Hier noch ein diff über das makefile nach LDFLAGS=-static ./configure --build=i386-linux-gnu --target=mipsel-linux --host=mipsel-linux und nach einem einfachen ./configure
Code:
74,80c74,80
< build_alias = i386-linux-gnu
< build_triplet = i386-pc-linux-gnu
< host_alias = mipsel-linux
< host_triplet = mipsel-unknown-linux-gnu
< target_alias = mipsel-linux
< target_triplet = mipsel-unknown-linux-gnu
< CC = mipsel-linux-gcc
---
> build_alias = i686-pc-linux-gnu
> build_triplet = i686-pc-linux-gnu
> host_alias = i686-pc-linux-gnu
> host_triplet = i686-pc-linux-gnu
> target_alias = i686-pc-linux-gnu
> target_triplet = i686-pc-linux-gnu
> CC = gcc
142c142
< LDFLAGS = -static
---
> LDFLAGS =
Hinweis: Das static soll natürlich später noch weg, ich will halt voererst mal testweise eine Binary, die ich direkt einsetzen kann.


Wenn das soweit läuft, dann taste ich mich mal an das erstellen von ds-mod-Makefiles ran. Interessiert mich ja schon länger, aber nun sind ja endlich mal wieder längere Ferien.
 
Vermutlich nerve ich Dich heute nacht ein bißchen, aber Du bist auf Fettnäpfchenjagd, sorry: off-topic, wenn Du nicht im und für den Mod baust. Da kriegst Du evtl. im übergeordneten Forum mehr Hilfe, wo Du auch wegen Matrixtunnel gefragt hast. Ich habe momentan leider nicht die Zeit, Dir speziell ein DS-Mod-Paket zu erstellen für eine IPv6-Anwendung, die im restlichen Mod noch gar nicht einsetzbar ist.
 
Was meinst du mit im Mod bauen? Für den Mod bauen will ich ja auf alle Fälle, aber ich dachte der Einfachheit halber, nehme ich mal Static. Außerdem nutze ich ja die Mod-Toolchain.
Was also muss ich machen, damit ich im Mod baue?
 
lord-of-linux schrieb:
Code:
mipsel-linux-gcc  -g -O2 -Wall -Wpointer-arith  -Wcast-qual -Wcast-align -Wconversion -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -static -o radvd  log.o socket.o recv.o util.o radvd.o timer.o send.o process.o interface.o device.o device-common.o gram.o scanner.o -lfl -lc 
/home/user/ds26-15.2/toolchain/build/gcc-4.2.1-uClibc-0.9.28/mipsel-linux-uclibc/lib/gcc/mipsel-linux-uclibc/4.2.1/../../../../mipsel-linux-uclibc/bin/ld: cannot find -lfl
collect2: ld returned 1 exit status

Kann mir jemand sagen, wie ich das Problem beheben kann? (Flex-Paket ist auf meinem System)
Wie Du richtig erkannt hast, wird die libfl nicht gefunden.

Du brauchst aber nicht die libfl für Dein Linux System (in /usr/lib), sondern eine libfl für die Box.

Also so wie Du gerade versucht hast, radvd für die Box zu erstellen, muß Du vorher die libfl für die Box erstellen und nachher dafür sorgen, daß diese libfl auch gefunden wird.
 
OK, it works

So, danke für eure Hilfe. Da hätte ich auch selbst draufkommen können. Naja, einfach mal früher ins Bett gehen würde das Problem bestimmt lösen.

radvd läuft nun statisch compiled. Nun geht es an das erstellen eines Makefiles für den Mod.

Kann mir da vielleicht jemand helfen, der Erfahrung mit den Makefiles für den Mod hat? So ganz habe ich die Zusammenhänge jedenfalls noch nicht verstanden. Wenn also jemand bereit ist, mir zu helfen, am besten per PN melden. Oder einfach per Jabber: [email protected] oder ICQ: 297212801

EDIT: Ich kämpfe gerade ein bisschen mit dem makefile. Ich habe mich einfach an vorhandenen Makefiles orientiert und baue daraus nun etwas. Ein paar Problemchen lassen mich noch kämpfen, aber ich bin zuversichtlich.

EDIT2: Ich werde aus den Abbruchmeldungen des make nicht so schlau. Kann das mal jemand anschauen?

EDIT3: Habe mal mein makefile angehängt. Liegt natürlich normal als flex.mk im Ordner make/libs.

EDIT die Vierte: Ich hänge mal die statische Binary für alle die Testen wollen mit an.
Und noch ne Frage: Kann mir jemand sagen, was radvdump macht?
 

Anhänge

  • flex-make.txt
    2.1 KB · Aufrufe: 7
  • radvd.tar
    240 KB · Aufrufe: 2
Zuletzt bearbeitet:
Wozu baust Du Flex für die Fritz!Box? Ich nehme eher an, radvd benötigt Flex auf dem Host, damit die Toolchain radvd bauen kann, so wie das auch bei einigen anderen Paketen der Fall ist, siehe Liste der notwendigen Linux-Pakete im Wiki.
 
kriegaex schrieb:
Wozu baust Du Flex für die Fritz!Box? Ich nehme eher an, radvd benötigt Flex auf dem Host, damit die Toolchain radvd bauen kann, so wie das auch bei einigen anderen Paketen der Fall ist, siehe Liste der notwendigen Linux-Pakete im Wiki.

Ne, radvd braucht flex bzw. die zu flex gehörende libfl.a für das Zielsystem.
(siehe oben, Beitrag von RalfFriedl)
 
lord-of-linux schrieb:
Ne, radvd braucht flex bzw. die zu flex gehörende libfl.a für das Zielsystem.
Wobei in libfl nur folgende Funktionen sind:
Code:
int
main ()
{
  while (yylex ())
    ;
}
// -----
int
yywrap ()
{
  return 1;
}
Wobei meistens eher yywrap gebraucht wird als main. Da könnte man genausogut yywrap irgenwo mit hineinsetzen und auf libfl verzichten.
 
Das hatte ich nicht gelesen, entschuldige bitte. Meine Schuld. Na sowas, eine Netzwerk-Software, die on the fly einen lexikalischen Scanner verwendet - sieht man selten. Na, dann schaue ich mir das mal an, Du hörst wieder was von mir. Ich muß aber erst mal weg, es kann dauern.

Edit: Überschneidung mit Ralf.
 
Schaut mal jemand drüber?

Will ja nicht drängeln, würde aber schon gern das radvd-Paket veröffentlichen. Schön wäre, wenn flex + radvd bis zum 24.08. funktioniert, denn dann bin ich getrennt von der zweiten 7170, die ich gerade zum Basteln nutze. Oder falls vorher ein ds-Update kommt, dann dieses Datum. Einfaches CGI + rc.radvd und so habe ich schon fertig, makefile radvd kann ich dann testen, wenn flex baut, erstellt ist es schon.
 
Häng doch einfach die Funktion yywrap irgendwo mit hinein, statt extra die Library dafür zu erstellen.
Oder gleich '#define yywrap() 1'
 
2 Probleme:
Zum einen hab ich keinen Global Link, erst beim manuellen Setzen von ner ipv6 Adresse. Ist das normal?

Zum Zweiten, @lord-of-linux gibt mir Dein radvd nix her? :gruebel:


Code:
/var/mod/home/samba/sda1 $ ifconfig lan
lan       Link encap:Ethernet  HWaddr 00:15:0C:xx:xx:xx
          inet addr:192.168.178.1  Bcast:192.168.178.255  Mask:255.255.255.0
          inet6 addr: fe80::xxx:xx:xxxx:x/64 Scope:Link
          UP BROADCAST RUNNING ALLMULTI MULTICAST  MTU:1500  Metric:1
          RX packets:119670 errors:0 dropped:0 overruns:0 frame:0
          TX packets:17283 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:8825186 (8.4 MiB)  TX bytes:3931575 (3.7 MiB)

/var/mod/home/samba/sda1 $ ip -6 addr add 2001:0db8:0:f101::2/64 dev lan
/var/mod/home/samba/sda1 $ ifconfig lan
lan       Link encap:Ethernet  HWaddr 00:15:0C:xx:xx:xx
          inet addr:192.168.178.1  Bcast:192.168.178.255  Mask:255.255.255.0
          inet6 addr: 2001:db8:0:f101::2/64 Scope:Global
          inet6 addr: fe80::xxx:xx:xxxx:x/64 Scope:Link
          UP BROADCAST RUNNING ALLMULTI MULTICAST  MTU:1500  Metric:1
          RX packets:119958 errors:0 dropped:0 overruns:0 frame:0
          TX packets:17452 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:8840446 (8.4 MiB)  TX bytes:3946021 (3.7 MiB)

/var/mod/home/samba/sda1 $ ./radvd -C radvd.conf
[Aug 12 14:11:10] radvd: IPv6 forwarding seems to be disabled, exiting
/var/mod/home/samba/sda1 $

Anbei meine radvd.conf
 

Anhänge

  • radvd.conf.tar.gz
    264 Bytes · Aufrufe: 4
RalfFriedl schrieb:
Häng doch einfach die Funktion yywrap irgendwo mit hinein, statt extra die Library dafür zu erstellen.
Oder gleich '#define yywrap() 1'
OK, wenn das reicht. Wo muss dieses #define yywrap() 1 denn da hin?


schmatke schrieb:
Zum einen hab ich keinen Global Link, erst beim manuellen Setzen von ner ipv6 Adresse. Ist das normal?
Ja, es sei den, in deinem Netzwek läuft ein radvd der die Adressen verteilt. Ich glaub aber auf der Verteilermaschine (bei uns die Fritz) muss sie manuel gesetzt sein. Auf einem vollwertigen Linux setzt man die Globale einfach per eintrag in /etc/network/interfaces.

schmatke schrieb:
Zum Zweiten, @lord-of-linux gibt mir Dein radvd nix her?
Es kann an deiner Config liegen. Versuch mal folgendes:
Code:
interface lan { 
        AdvSendAdvert on;
        MinRtrAdvInterval 3; 
        MaxRtrAdvInterval 10;
        prefix [B]2001:db8:0:f101::/64[/B] { 
                AdvOnLink on; 
                AdvAutonomous on; 
                AdvRouterAddr on; 
        };
};
Ich habe den betroffenen Bereich hervorgehoben.
Gibt es hier radvd-Experten? Am Ende des Prefix muss/darf beim Prefix keine zahl stehen?
 
RalfFriedl schrieb:
In die Datei, die versucht, yywrap aufzurufen, vermutlich scanner.l
Ansonsten in irgendeine Datei yywrap als globale Funktion mit aufnehmen.
Was ist den sinnvoller?

Könntest du vielleicht kurz nen Patch zu der Variante machen, die du für besser hältst? Kenne mich damit noch nicht so aus und patch ist doch wahrscheinlich die beste möglichkeit, aus dem makefile heraus die Sourcen zu ändern?
 
Ich habe die Sourcen nicht, das mit scanner.l ist nur geraten aus Deiner Fehlermeldung in Post #1.
Die Funktion yywrap() (siehe #10) geht immer, das ist genau das gleich, was in der libfl auch drin ist.
Das '#define yywrap() 1' muß in der Datei, in der yywrap verwendet wird, stehen, und zwar vor dem Aufruf. Dies ist typischerweise die Datei, die den Scanner enthält, daher die Vermutung, daß es in diesem Fall die Datei scanner.l ist.
Von daher ist die Variante mit der Funktion einfacher und sicherer, die Variante mit dem #define spart dafür ein paar (wenige) Bytes im Programm ein.
 
Kann mir jemand sagen, wie ich einen Patch erzeuge, damit ich diesen per Makefile in die Orginal-Sourcen einspielen kann? Ich weiß bisher leider nur, wie ich die Patches einspiele.

EDIT: Paket ist fertig, NUR das Binary fehlt noch. CGI usw. habe ich mit dem statischen Binary getestet.
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.