[Frage] ltrace 0.7.3 compile Fehler

edgecrusher

Mitglied
Mitglied seit
4 Mai 2008
Beiträge
303
Punkte für Reaktionen
4
Punkte
18
Hallo,

zuallererst einmal Entschuldigung dafür, dass ich das im Freetz Modifikations Unterforum poste, da es sich bei dem CPE, für das ich ltrace bauen möchte, nicht um eine FRITZ!Box handelt. Da hier aber die tiefergehenden Probleme behandelt werden, das bauen auch für ein MIPS System erfolgen soll und die Experten hier sind, habe ich mich dazu erdreistet. Mein Problem besteht darin, dass die Datei "gelf.h" oder "libelf.h" für das "configure" nicht gefunden wird, hier die entsprechende Fehlermeldung beim Make des FW Images

checking for style of include used by make... GNU
checking dependency style of /opt/toolchains/uclibc-crosstools-gcc-4.4.2-1/usr/bin/mips-linux-uclibc-gcc... gcc3
checking whether to enable maintainer-specific portions of Makefiles... no
checking elf.h usability... yes
checking elf.h presence... yes
checking for elf.h... yes
checking gelf.h usability... no
checking gelf.h presence... no
checking for gelf.h... no
configure: error: *** libelf.h or gelf.h not found on your system
make[2]: *** [ltrace-0.7.3] Fehler 1
make[2]: Verlasse Verzeichnis '/home/freetz/HomeBox6641_router/userspace/gpl/apps'
make[1]: *** [gpl-apps] Fehler 2
make[1]: Verlasse Verzeichnis '/home/freetz/HomeBox6641_router/userspace'
make: *** [userspace] Fehler 2

Ich habe mich dann mal in die Problematik versucht einzulesen (google), bin auch auf einige Anhaltspunkte gestoßen und auch beim Durchsehen der Freetz Make-Files ist ersichtlich, dass die dort verwendete Version 0.5.3 auch auf ein Cross-Kompilat von "libelf" für das Zielsystem angewiesen ist. Dieses habe ich dann auch erfolgreich gebaut, mit folgender Make-Segment (BUILD_LIBELF ist auf "y" im Config File gesetzt)

ifneq ($(strip $(BUILD_LIBELF)),)
libelf-0.8.13:
(tar xkfz libelf-0.8.13 2> /dev/null || true)
cd libelf-0.8.13; ./configure --host=mips-linux-uclibc --target=mips-linux-uclibc --enable-compat --enable-static --prefix=$(TOOLCHAIN)
$(MAKE) -C libelf-0.8.13 install
else
libelf-0.8.13:
@echo "skipping libelf-0.8.13 (not configured)"
endif

Frage erstmal hierzu, wenn ich es richtig verstanden habe, dann müssen die Dateien, die hierbei entstehen (vor allem libelf.h/gelf.h) in den Ordner der Toolchain (dort dann .../usr/include), ist das korrekt? Daher habe ich als "prefix" auch "$(TOOLCHAIN)" statt dem normalen Installationspfad genutzt. Ist es sinnvoll "--enable-static" und/oder "--enable-shared" zu nutzen. Im Ticket 1058 wird beides in das Makefile geschrieben, ich bin da verwirrt. Mit der oben ersichtlichen Make Anweisung hat er meines Erachtens nach korrekt gebaut und wenn ich nun unter dem Toolchain Pfad gucke, sind (durch "--enable-compat") auch die entsprechenden Dateien im include-Ordner vorhanden

-rw-r--r-- 1 root root 25 Okt 15 08:28 /opt/toolchains/uclibc-crosstools-gcc-4.4.2-1/usr/include/gelf.h
-rw-r--r-- 1 root root 27 Okt 15 08:28 /opt/toolchains/uclibc-crosstools-gcc-4.4.2-1/usr/include/libelf.h
-rw-r--r-- 1 root root 24585 Okt 15 08:28 /opt/toolchains/uclibc-crosstools-gcc-4.4.2-1/usr/include/libelf/elf_repl.h
-rw-r--r-- 1 root root 5103 Okt 15 08:28 /opt/toolchains/uclibc-crosstools-gcc-4.4.2-1/usr/include/libelf/gelf.h
-rw-r--r-- 1 root root 9050 Okt 15 08:28 /opt/toolchains/uclibc-crosstools-gcc-4.4.2-1/usr/include/libelf/libelf.h
-rw-r--r-- 1 root root 1452 Okt 15 08:28 /opt/toolchains/uclibc-crosstools-gcc-4.4.2-1/usr/include/libelf/nlist.h
-rw-r--r-- 1 root root 3969 Okt 15 08:28 /opt/toolchains/uclibc-crosstools-gcc-4.4.2-1/usr/include/libelf/sys_elf.h

die beiden Datein im ../usr/include/ enthalten (korrekterweise) nur ein "#include <libelf/gelf.h>" bzw. "#include <libelf/libelf.h>" auf den entsprechenden Ordner. Mache ich das soweit, bis hierhin, erstmal korrekt oder ist das schon komplett falsch?

Wenn ich nun den Make-Prozess für den Bau des gesamten Images starte, tritt der oben genannte Fehler auf. Ich hätte jetzt erwartet, dass er, nachdem diese beiden Dateien im "Toolchain Ordner" zur Verfügung stehen, das "configure" sauber durchführt, und ggf. beim "compile" hängt, aber er bricht leider da schon ab. Sollte ich mit "EXTRA_CFLAGS" arbeiten (für das "configure" von ltrace) um den Ordner nochmal zu inkludieren?

Welche weiteren Informationen würden benötigt werden?

edgecrusher
 
Startest Du den ltrace-Build-Prozess in einem frisch entpackten Verzeichnis oder sind da Reste früherer Versuche enthalten, e.g. config.cache? Wenn ja, lösche mal diese - da wird der Wert von gelf gecached, erkennbar an der Ausgabe von configure, sollte sowas wie "checking for gelf.h... no (cached)" stehen.

Ansonsten wäre auch dieses Ticket für Dich vermutlich interessant, mit der Erkenntnis, dass ltrace-0.7.x mit einer plt-enabled-Toolchain bzw. einem plt-enabled-compiled-Binary auf MIPS nicht funktioniert.
 
Ja der Versuch des "configure" war mit frisch entpacktem Verzeichnis und es gibt keine config.cache Datei, sprich es ist in keiner Form etwas gecached. Wie gesagt, es ist keine FRITZ!Box für die das Ganze erstellt wird (ist die neue Homebox HN6641 von O2, von ZyXEL hergestellt und ich benutze die pre-build Toolchain (aus deren Open Source Package) und ändere im Grunde nur die Make-Dateien für meine Bedürfnisse um).

Wie kann ich den eventuell feststellen, an welchem Pfaden das "configure" Script nach gelf.h u.ä. sucht? Sprich gibt es da eine Option, damit ich mir das anzeigen lassen kann?

Danke erstmal für den Hinweis auf das Ticket, allerdings komme ich noch nicht zum Build, sprich die Funktionalität würde ich dann später sehen. Woran würde ich "plt-enabled" in einer Toolchain denn erkennen? Wenn ich Zeit finde, werde ich versuchen, die 0.5.3 zu kompilieren. Auch wenn die Patches für Freetz gemacht sind, sollte ich die auch auf meinem CPE nutzen (denke schon)?


Nachtrag 17.10.2014 8:22 Uhr:

Ich habe jetzt mal ltrace-0.5.3 versucht zu bauen. Das "configure" klappt, "Makefile" wird erstellt. Habe die 5 Patches hinzugefügt und das Kompilat bricht mit folgender Meldung ab. Was ich sehr interessant finde, mangels meiner nicht vorhandenen Kenntnisse, ist, dass er hier gelf.h wiederum findet im Ordner wo es beim Lib-Bauen hingepackt wird und sauber inkludiert.

Code:
cd ltrace-0.5.3; ./configure --host=mips-linux --prefix=/home/freetz/HomeBox6641_router/targets/DSL-2492GNAUID-B3CC/fs.install/
checking package name... ltrace
checking ltrace version... 0.5.3
checking HOST_OS... linux-gnu
checking for cplus_demangle in -liberty... yes
checking for __cxa_demangle in -lsupc++... yes
checking whether elf_begin accepts ELF_C_READ_MMAP... no
configure: creating Makefile
configure: creating config.h
(tar xkfz ltrace_0.5.3.orig.tar.bz2 2> /dev/null || true)
make -C ltrace-0.5.3 install
make[3]: Betrete Verzeichnis '/home/freetz/HomeBox6641_router/userspace/gpl/apps/ltrace-0.5.3'
/opt/toolchains/uclibc-crosstools-gcc-4.4.2-1/usr/bin/mips-linux-uclibc-gcc -Wall -g -O2 -iquote /home/freetz/HomeBox6641_router/userspace/gpl/apps/ltrace-0.5.3 -iquote /home/freetz/HomeBox6641_router/userspace/gpl/apps/ltrace-0.5.3/sysdeps/linux-gnu -DSYSCONFDIR=\"/home/freetz/HomeBox6641_router/targets/DSL-2492GNAUID-B3CC/fs.install//etc\"   -c -o main.o main.c
make -C sysdeps/linux-gnu
make[4]: Betrete Verzeichnis '/home/freetz/HomeBox6641_router/userspace/gpl/apps/ltrace-0.5.3/sysdeps/linux-gnu'
cat i386/arch.h > sysdep.h
cp i386/signalent.h signalent.h
cp i386/syscallent.h syscallent.h
if [ -f i386/arch_syscallent.h ]; then \
			cp i386/arch_syscallent.h arch_syscallent.h; \
		else \
			> arch_syscallent.h; \
		fi
if [ -f i386/signalent1.h ]; then \
			cp i386/signalent1.h signalent1.h; \
		else \
			> signalent1.h; \
		fi
if [ -f i386/syscallent1.h ]; then \
			cp i386/syscallent1.h syscallent1.h; \
		else \
			> syscallent1.h; \
		fi
/opt/toolchains/uclibc-crosstools-gcc-4.4.2-1/usr/bin/mips-linux-uclibc-gcc -Wall -g -O2 -iquote /home/freetz/HomeBox6641_router/userspace/gpl/apps/ltrace-0.5.3 -iquote /home/freetz/HomeBox6641_router/userspace/gpl/apps/ltrace-0.5.3/sysdeps/linux-gnu -DSYSCONFDIR=\"/home/freetz/HomeBox6641_router/targets/DSL-2492GNAUID-B3CC/fs.install//etc\"  -I/home/freetz/HomeBox6641_router/userspace/gpl/apps/ltrace-0.5.3/sysdeps/linux-gnu/i386  -c -o events.o events.c
[B][COLOR="#FF0000"]In file included from /opt/toolchains/uclibc-crosstools-gcc-4.4.2-1/usr/include/gelf.h:1,[/COLOR][/B]
                 from /home/freetz/HomeBox6641_router/userspace/gpl/apps/ltrace-0.5.3/elf.h:4,
                 from /home/freetz/HomeBox6641_router/userspace/gpl/apps/ltrace-0.5.3/common.h:12,
                 from events.c:12:
[COLOR="#FF0000"][B]/opt/toolchains/uclibc-crosstools-gcc-4.4.2-1/usr/include/libelf/gelf.h:51:2: error: #error "GElf is not supported on this system."[/B][/COLOR]
In file included from /home/freetz/HomeBox6641_router/userspace/gpl/apps/ltrace-0.5.3/common.h:12,
                 from events.c:12:
/home/freetz/HomeBox6641_router/userspace/gpl/apps/ltrace-0.5.3/elf.h:10: error: expected specifier-qualifier-list before 'GElf_Ehdr'
/home/freetz/HomeBox6641_router/userspace/gpl/apps/ltrace-0.5.3/elf.h:44: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'arch_plt_sym_val'
events.c: In function 'next_event':
events.c:92: warning: implicit declaration of function 'ptrace'
make[4]: *** [events.o] Fehler 1
make[4]: Verlasse Verzeichnis '/home/freetz/HomeBox6641_router/userspace/gpl/apps/ltrace-0.5.3/sysdeps/linux-gnu'
make[3]: *** [sysdeps/sysdep.o] Fehler 2
make[3]: Verlasse Verzeichnis '/home/freetz/HomeBox6641_router/userspace/gpl/apps/ltrace-0.5.3'
make[2]: *** [ltrace-0.5.3] Fehler 2
make[2]: Verlasse Verzeichnis '/home/freetz/HomeBox6641_router/userspace/gpl/apps'
make[1]: *** [gpl-apps] Fehler 2
make[1]: Verlasse Verzeichnis '/home/freetz/HomeBox6641_router/userspace'
make: *** [userspace] Fehler 2
 
Zuletzt bearbeitet:

Neueste Beiträge

Statistik des Forums

Themen
244,869
Beiträge
2,219,796
Mitglieder
371,586
Neuestes Mitglied
Patterchon
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.