9

アプリケーションをクロスコンパイルしていますが、リンクするとエラーが発生します。

「/lib/libc.so.6が見つかりません」。

使用する必要があるlibc.so.6は、にあるものです/home/work/worldcom/filesys/lib/libc.so.6。ここで何が間違っているのですか?

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 />

私のmakefileは手書きです(つまり、Autotoolsによって生成されません)。「あなたのMakefileが壊れている」という包括的なことを避けるために、ここに明確にするのに役立つかもしれないmakefileからのいくつかの詳細があります。

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) 

もちろん、LIBOBJ_OBJSの定義とターゲットもありますが、これらは問題とは無関係です。

4

4 に答える 4

14

使用しているgccバージョンを指定していませんが、それが最近のものである場合(4.0.0以上であると私は考えています)--sysroot、g ++/ldにフラグを追加してみてください。Makefileで定義されている$SYSROOTをポイントします。例えば:

--sysroot=$(SYSROOT)

最近の十分なgccバージョンを想定すると、動作します。

于 2009-12-27T20:43:08.387 に答える
1

私はちょうど同じ問題を経験しました。--sysroot = / rootfs / prefixを追加すると、実際の問題に近づくことができました。ターゲットにパッケージlibstdc++-devをインストールすることで修正しました。

于 2012-11-23T09:30:45.747 に答える
0

が設定され、パスLIBPATHを検索するようにハードコードされている可能性があることを考慮していませんか?/lib/libc.so.6/lib

makeクロスコンパイル時に発行する前に、コマンドラインで次のような環境変数を設定しようとしましたか?

LIBPATH = / home / work / worldcom / filesys / lib

あなたの特定のケースでは、タグ「クロスコンパイル」で述べたように/lib、クロスコンパイルを妨げないように、リンカーに自分のホームディレクトリを完全に検索させるための参照を削除する価値があるかもしれません。処理する。

もう1つの可能性は、ご使用の環境用にビルドされたときのgccコンパイラー、つまりソースからコンパイラーをビルドするときの構成が、/libパスを指すように指定されたことです。

これがお役に立てば幸いです、よろしく、トム。

于 2009-12-27T02:34:12.223 に答える
-3

libc.so.6は/lib/フォルダーにあると想定されているため、makefileが壊れているようです(前のスラッシュは絶対パスを示しています!)。これが問題のようです。

于 2009-12-27T02:00:39.013 に答える