私は構築しようとしています最初からLinuxカスタムの場所または既存のCentOSインストール内でrootアクセスは必要ありません。
LFS
私のホームディレクトリに絶対パスを設定LFS_TGT=x86_64-lfs-linux-gnu
し、export PATH=${LFS}/tools/bin:$PATH
組み込みbinutils-2.28
:
../configure --prefix=${LFS}/tools \
--with-sysroot=$LFS \
--with-lib-path=${LFS}/tools/lib \
--target=$LFS_TGT \
--disable-nls \
--disable-werror
その後、シンボリックリンクを${LFS}/tools/lib64
かけて${LFS}/tools/lib
カーネルヘッダをインストールし、linux-2-6-32-8
すべてをそのディレクトリにgcc-4.9.2
ビルドしました。glibc-2.11.1
${LFS}/tools
次に、を入力しましたが、次のx86_64-lfs-linux-gnu-ld -lc
エラーが発生しました。
x86_64-lfs-linux-gnu-ld: cannot find -lc
cd ${LFS}/tools/lib64
その後、x86_64-lfs-linux-gnu-ld libc.so
次のエラーが発生します。
x86_64-lfs-linux-gnu-ld: cannot find ${LFS}/tools/lib/libc.so.6 inside ${LFS}
私はこのエラーを理解できません。ファイルlibc.so.6
が正しい場所にあります。
--with-lib-path=${LFS}/tools/lib
設定オプションは、環境変数を設定せずにライブラリを検索するように指示するとbinutils-2.28
思います。しかし、これは本当ではありません。x86_64-lfs-linux-gnu-ld
${LFS}/tools/lib
LD_LIBRARY_PATH
なぜ?
これを設定LD_LIBRARY_PATH
すると、${LFS}/tools/lib
作成したばかりのアイテムやCentOSの既存のコアユーティリティなど、すべてのアイテムで分割エラーが発生します。
修正する:
私も次のことを試しました。
../configure --prefix=${LFS}/tools \
--with-sysroot=$LFS \
--with-lib-path=tools/lib \ # this is changed
--target=$LFS_TGT \
--disable-nls \
--disable-werror
ただし、両方のエラーが引き続き発生します。
答え1
私も同じ問題があり、2日間試してみたところで問題を発見しました。問題はglibcにあります。 ldはlibc.so
ファイルを見つけてリンクしようとしますが、ファイルはリンクするファイルをリンカーに通知するリンカースクリプトです。内容は次のとおりです。
/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily. */
OUTPUT_FORMAT(elf64-x86-64)
GROUP ( ${LFS}/tools/lib/libc.so.6 ${LFS}/tools/lib/libc_nonshared.a AS_NEEDED ( ${LFS}/tools/lib/ld-linux-x86-64.so.2 ) )
gccは--sysroot=${LFS}
オプションをldに渡すからです。 ldが追加され、${LFS}
リンク${LFS}/tools/lib/libc.so.6
を試みると上記のエラーが発生します。
glibc_source_dir/Makerules line 1082
:
install: $(inst_libdir)/libc.so
$(inst_libdir)/libc.so: $(common-objpfx)format.lds \
$(common-objpfx)libc.so$(libc.so-version) \
$(inst_libdir)/$(patsubst %,$(libtype.oS),\
$(libprefix)$(libc-name)) \
$(+force)
(echo '/* GNU ld script';\
echo ' Use the shared library, but some functions are only in';\
echo ' the static library, so try that secondarily. */';\
cat $<; \
echo 'GROUP ( $(slibdir)/libc.so$(libc.so-version)' \
'$(libdir)/$(patsubst %,$(libtype.oS),$(libprefix)$(libc-name))'\
' AS_NEEDED (' $(rtlddir)/$(rtld-installed-name) ') )' \
) > [email protected]
mv -f [email protected] $@
glibcのインストール先はすべてのライブラリをインストールし、$(inst_libdir)
notに関連するファイルを作成するときに使用されます$(DESTDIR)$(prefix)
。$(libdir)
$(slibdir)
libc.so
$(prefix)
$(DESTDIR)
回避策:glibcを設定--prefix=/tools
したら、次のようにインストールする必要があります。
DESTDIR=${LFS} make install
答え2
Centos用のコンパイラがglibc-2.11をビルドするには古い4.1.2であるため、最初に最新バージョンのコンパイラ(クロスコンパイルではなくホストアーキテクチャ用のコンパイル用gcc-4.4.3)をビルドする必要がありました。 。その後、私はこの新しいコンパイラを使用して「Linux from Scratch Version 6.6」でクロスコンパイルツールチェーンを構築しました。これまでのビルドでは私に何も求めていませんでしたsed
。クロスコンパイラを設定し、それを使用してgccとglibcの最新バージョンを構築するようです。