[Problem] dnsmasq compiliert nicht durch

robbork

Neuer User
Mitglied seit
15 Nov 2009
Beiträge
8
Punkte für Reaktionen
0
Punkte
0
Hallo,
habe aktuellen trunk komplett neu ausgecheckt, und ein Image für FB 7490 mit folgenden Paketen kompiliert: mc, privoxy, tor und dropbear. Dieses Image läuft tadellos. Füge dann dnsmasq hinzu, kommt bei der Erstellung der cache.o folgender Fehler:

/home/mb/src/freetz/freetz-trunk/toolchain/build/mips_gcc-4.8.3_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin/mips-linux-uclibc-gcc -march=24kc -Os -pipe -Wa,--trap -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -ffunction-sections -fdata-sections -DCONFFILE=\"/mod/etc/dnsmasq.conf\" -DRUNFILE=\"/var/run/dnsmasq/dnsmasq.pid\" -DLEASEFILE=\"/var/tmp/dnsmasq.leases\" -DMULTID_LEASES_FORMAT_V2 -DVERSION='"2.72"' -c loop.c
/home/mb/src/freetz/freetz-trunk/toolchain/build/mips_gcc-4.8.3_uClibc-0.9.33.2-nptl/mips-linux-uclibc/bin/mips-linux-uclibc-gcc -Wl,--gc-sections -o dnsmasq cache.o rfc1035.o util.o option.o forward.o network.o dnsmasq.o dhcp.o lease.o rfc2131.o netlink.o dbus.o bpf.o helper.o tftp.o log.o conntrack.o dhcp6.o rfc3315.o dhcp-common.o outpacket.o radv.o slaac.o auth.o ipset.o domain.o dnssec.o blockdata.o tables.o loop.o
mips-linux-uclibc-gcc: error: cache.o: No such file or directory
/home/mb/src/freetz/freetz-trunk/source/target-mips_gcc-4.8.3_uClibc-0.9.33.2-nptl/dnsmasq-2.72/Makefile:153: die Regel für Ziel „dnsmasq“ scheiterte
make[2]: *** [dnsmasq] Fehler 1
make[2]: Verzeichnis „/home/mb/src/freetz/freetz-trunk/source/target-mips_gcc-4.8.3_uClibc-0.9.33.2-nptl/dnsmasq-2.72/src“ wird verlassen
Makefile:78: die Regel für Ziel „all“ scheiterte
make[1]: *** [all] Fehler 2
make[1]: Verzeichnis „/home/mb/src/freetz/freetz-trunk/source/target-mips_gcc-4.8.3_uClibc-0.9.33.2-nptl/dnsmasq-2.72“ wird verlassen

ERROR: Build failed.
make/dnsmasq/dnsmasq.mk:29: die Regel für Ziel „source/target-mips_gcc-4.8.3_uClibc-0.9.33.2-nptl/dnsmasq-2.72/src/dnsmasq“ scheiterte
make: *** [source/target-mips_gcc-4.8.3_uClibc-0.9.33.2-nptl/dnsmasq-2.72/src/dnsmasq] Fehler 1

Hat das Problem noch jemand? Kann da jemand helfen?
Schon mal vielen Dank
Robert
 

Anhänge

  • .config.tar
    62 KB · Aufrufe: 0
Zuletzt bearbeitet:
Kannst du bitte deine .config anhängen, dass wir das nachvollziehen können.

Gruß Oliver
 
Hallo Oliver,
habe den Fehler gefunden. In der
.../freetz-trunk/source/target-mips_gcc-4.8.3_uClibc-0.9.33.2-nptl/dnsmasq-2.72/src/cache.c
habe ich die vorletzte Zeile gelöscht (die nach der letzten Klammer). Da hat sich ein Leerzeichen eingeschlichen. Danach kompiliert er problemlos durch.
Das scheint ja wohl ein Bug zu sein.

Gruß Robert
 
Unter welchem System kompilierst Du? Ubuntu, Arch, Fedora, ...? Bitte mit genauer Version.
 
Arch Linux 64bit mit gcc-multilib 4.9.2-1.
 
Ich kann es unter Ubuntu 14.04.1 LTS 64bit nicht reproduzieren.
 
Ich kann es unter Ubuntu 14.04.1 LTS 64bit nicht reproduzieren.

O.K. dann wird meine gcc-version, die vermutlich neuer sein wird als Deine, mit Whitespaces nicht so tolerant sein.
Vieleicht gibt es ja noch jemanden, der wie ich ein Arch 64bit benutzt und das Ganze nachvollziehen kann. Wäre ja mal interessant.

Gruß Robert
 
O.K. dann wird meine gcc-version, die vermutlich neuer sein wird als Deine, mit Whitespaces nicht so tolerant sein.

Warum sollte irgend ein C Compiler mit Whitespaces nicht tolerant sein?
Was ist denn das ursprüngliche Problem? Im ersten Beitrag kann man nur erkennen, dass cache.o nicht existiert, aber nicht, warum die Datei nicht erstellt werden konnte.
 
Hallo Ralf,
ich fasse mal zusammen:
Make ist ins Verzeichnis .../src gegangen und gcc hat alle *.c Dateien zu *.o kompiliert, ausser cache.c zu cache.o. Da hat gcc abgebrochen, bzw. nicht kompiliert (warum weis ich nicht). Weil cache.o nicht erzeugt wurde, hat make abgebrochen. Deshalb habe ich mir mit dem Editor des mc die cache.c angesehen. Dabei fiel mir auf, dass nach der letzten Klammer noch 2 o.3 Zeilen vorhanden waren, und bei einer davon ein Leerzeichen (im internen mc-editor werden Leerzeichen als lila Punkte angezeigt) vorhanden war. Daraufhin habe ich diese Zeile mit Leerzeichen gelöscht und die Datei gespeichert. Danach hat make komplett durchkompiliert, das Image ist bereits auf meiner Box und scheint stabil zu laufen.
Das sind die Fakten, mehr kann ich Dir leider auch nicht sagen.
Gruß Robert
 
Ich weiß auch nicht, warum die Compilierung abgebrochen wurde, und anscheinend werden wir es nie erfahren, es sei denn, dass Du es nochmal mit den original Dateien versuchst (make dnsmasq-dirclean; make dnsmasq-precompiled)
Jedenfalls sollte sich kein C Compiler daran stören, ob irgendwo Leerzeichen in leeren Zeilen stehen.
 
Hallo Ralf,
Du hattest recht, das Rumgefummle an der cache.c hatte mit dem Fehler nichts zu tun. Da habe ich mich ins Bockshorn jagen lassen. Der Fehler an sich ist aber auf meinem System reproduzierbar. Habe nochmal mit einem jungfräulichen svn "make" aufgerufen, der Fehler mit Abbruch war wieder da. Siehe Anhang. Ich brauchte aber nur nochmal "make" eingeben, dann kompiliert er durch. Dasselbe Phänomen tritt auch nach einem "make distclean" auf.

Gruß Robert
 

Anhänge

  • erster_Durchlauf.txt
    18.8 KB · Aufrufe: 4
Da ist nichts vom einem Fehler in cache.c zu sehen. Es sieht so aus, als wäre gcc ohne Fehlermeldung und ohne Fehlerstatus durchgelaufen, ohne eine Datei cache.o zu erstellen, was sehr ungewöhnlich wäre. Eine andere Erklärung wäre, dass die Datei cache.o zwar erstellt wird, aber aus irgend einem Grund der Linker zu früh aufgerufen wird, bevor die Datei cache.o fertig ist, was auch wäre sehr ungewöhnlich wäre.

Kannst Du mal kontrollieren, ob nach dem ersten Durchlauf, bei dem der Fehler auftritt, die Datei cache.o in dem Verzeichnis vorhanden ist oder nicht?
Wenn Du danach das zweite Mal make aufrufst, wird dann nochmal versucht, die Datei cache.c nach cache.o zu kompilieren, oder wird direkt der Linker aufgerufen?

Du brauchst dafür nicht alles zu löschen, die oben angegebenen Kommandos "make dnsmasq-dirclean" und "make dnsmasq-precompiled" sollten dafür reichen.
 
Nach dem ersten Durchlauf wird keine cache.o erzeugt. Beim zweiten Durchlauf wird sie erzeugt.
 
Ändert sich was in Bezug auf "nach dem ersten/nach dem zweiten Durchlauf", wenn Du in der dnsmasq.mk in der Zeile 29 SUBMAKE durch SUBMAKE1 ersetzt?
 
Ja, das tut es. Nach der Änderung zu "SUBMAKE1" und einem "make distclean" läuft der Prozess komplett durch, die "cache.o" wurde erstellt. :)
 
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.