Kann nicht finden, /lib/libc.so.6
Ich bin cross-kompilieren einer Anwendung, aber die Verknüpfung weht mit einer Fehlermeldung, dass es
"cannot find /lib/libc.so.6".
Libc.so.6, die Sie verwenden sollten, ist die eine, die sitzt auf /home/work/worldcom/filesys/lib/libc.so.6
. Was habe ich hier falsch?
linking libobj.so
arm-none-linux-gnueabi-g++ obj1.o obj2.o obj2.o -o libobj.so -L/home/work/worldcom/filesys/usr -Wl,-O1 -Wl,-z,defs -Wl,--enable-new-dtags -Wl,--sort-common -Wl,--as-needed -Wl,--hash-style=both -L/home/work/worldcom/filesys -L/home/work/worldcom/filesys/lib -L/home/work/worldcom/filesys/usr/lib -lcurl -shared
/home/lishevita/armv5tel/arm-2009q3/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/bin/ld: skipping incompatible /lib/libc.so.6 when searching for /lib/libc.so.6
/home/lishevita/armv5tel/arm-2009q3/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/bin/ld: cannot find /lib/libc.so.6
collect2: ld returned 1 exit status<br />
make: *** [libobj.so] Error 1<br />
Mein makefile ist handschriftlich (also nicht generiert Autotools). Um zu vermeiden, dass eine Decke "Makefile ist gebrochen" hier sind einige details aus dem makefile, die helfen könnten zu klären.
CROSS_COMPILE = arm-none-linux-gnueabi-
SYSROOT = /home/work/worldcom/filesys/
DESTDIR = /home/work/worldcom/filesys/
RELEASE_CXXFLAGS = -Os
DEBUG_CXXFLAGS = -O0 -gstabs
PKGCONFIG=`env ROOT=/home/work/worldcom/filesys cross-pkg-config glib-2.0 libcurl --cflags`
CC = $(CROSS_COMPILE)gcc
CXX = $(CROSS_COMPILE)g++
LD = $(CROSS_COMPILE)ld
AR = $(CROSS_COMPILE)ar
LDFLAGS = -Wl,-O1 -Wl,-z,defs -Wl,--enable-new-dtags -Wl,--sort-common -Wl,--as-needed -Wl,--hash-style=both -L$(SYSROOT) -L$(SYSROOT)lib -L$(SYSROOT)usr -L$(SYSROOT)usr/lib -lcurl
libobj.so: $(LIBOBJ_OBJS)
@echo linking $@
$(CXX) $^ -o $@ $(LDFLAGS) -shared $(PKG_LIBS)
Gibt es natürlich auch eine definition und Ziel für die LIBOBJ_OBJS diese sind aber irrelevant für das problem.
- Sie sollten einen Blick auf die Ausgabe von <code>gcc -dumpspecs</code> - es kann etwas in etwa dort, wo sucht es die libc.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du nicht angeben, welche gcc-version du verwendest, aber wenn es eine neuere genug, dass eine (4.0.0 und über mir denkt), Sie sollten versuchen, die -sysroot-flag auf g++/ld. Zeigen Sie es auf $SYSROOT als in Ihrem Makefile definiert.
Vorausgesetzt gcc-version neu genug ist, wird es funktionieren.
Hoffe, das hilft,
Gilad
Ich ging gerade durch das gleiche Problem; hinzufügen --sysroot=/rootfs/Präfix hat mir geholfen, näher an das wirkliche Problem. Ich habe es behoben durch Installation des Pakets libstdc++-dev in Ziel.
Haben Sie nicht bedacht, dass möglicherweise die
LIBPATH
gesetzt und hart-codiert, um den Blick für die/lib/libc.so.6
und daher die/lib
Weg?Haben Sie versucht, setzen Sie die Umgebungsvariable wie diese auf der Befehlszeile vor der Erteilung
make
beim cross-kompilieren:In Ihrem speziellen Fall, wie Sie erwähnt haben, in den tag 'cross-kompilieren', es könnte sich lohnen, es zu entfernen Sie alle Verweise auf
/lib
ganz Kraft, die den linker an, schauen Sie in Ihren eigenen home-Verzeichnis statt als nicht zu stören mit der cross-compile-Prozess.Die andere Möglichkeit ist, dass der gcc-compiler, wenn es gebaut wurde, für Ihre Umgebung, die Konfiguration während des Bau der compiler von der Quelle, die angegeben wurde, um auf die
/lib
Weg.Hoffe, das hilft,
Beste Grüße,
Tom.
Scheint es, dass das makefile kaputt ist, weil die libc.so.6 wird davon ausgegangen, dass sich im /lib/Ordner (beachten Sie die vorangestellten Schrägstrich angibt, einen absoluten Pfad! ). Das scheint das Problem sein.