LFS (Linux From Scratch) day13,14

「8.26. GCC-10.2.0」まで

パッケージをコンパイルすると
Zstdの関数が無いとリンカでエラーになる。

/usr/lib/gcc/x86_64-lfs-linux-gnu/10.2.0/../../../../x86_64-lfs-linux-gnu/bin/ld: /sources/gcc-10.2.0/build/gcc/../../gcc/lto-compress.c:170: undefined reference to `ZSTD_getErrorName'
collect2: error: ld returned 1 exit status
make[2]: *** [../../gcc/c/Make-lang.in:85: cc1] Error 1
make[2]: Leaving directory '/sources/gcc-10.2.0/build/gcc'
make[1]: *** [Makefile:4483: install-gcc] Error 2
make[1]: Leaving directory '/sources/gcc-10.2.0/build'
make: *** [Makefile:2401: install] Error 2

Zstdの手順を間違えた覚えはない。
PCはシャットダウンしてるから一気にやっていないのはあるが……
エラー元のgccコマンドは以下

make[2]: Entering directory '/sources/gcc-10.2.0/build/gcc'
g++ -no-pie   -g -O2 -DIN_GCC     -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual -Wno-error=format-diag -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros -Wno-overlength-strings   -DHAVE_CONFIG_H  -o cc1 c/c-lang.o c-family/stub-objc.o attribs.o c/c-errors.o c/c-decl.o c/c-typeck.o c/c-convert.o c/c-aux-info.o c/c-objc-common.o c/c-parser.o c/c-fold.o c/gimple-parser.o c-family/c-common.o c-family/c-cppbuiltin.o c-family/c-dump.o c-family/c-format.o c-family/c-gimplify.o c-family/c-indentation.o c-family/c-lex.o c-family/c-omp.o c-family/c-opts.o c-family/c-pch.o c-family/c-ppoutput.o c-family/c-pragma.o c-family/c-pretty-print.o c-family/c-semantics.o c-family/c-ada-spec.o c-family/c-ubsan.o c-family/known-headers.o c-family/c-attribs.o c-family/c-warn.o c-family/c-spellcheck.o i386-c.o glibc-c.o \
  cc1-checksum.o libbackend.a main.o libcommon-target.a libcommon.a ../libcpp/libcpp.a ../libdecnumber/libdecnumber.a libcommon.a ../libcpp/libcpp.a   ../libbacktrace/.libs/libbacktrace.a ../libiberty/libiberty.a ../libdecnumber/libdecnumber.a   -lmpc -lmpfr -lgmp -rdynamic -ldl  -lz 

ライブラリのパスが指定されていないが特に手順通りのハズ
ライブラリは共有(/usr/lib/libstd.so -> /lib/libzstd.so.1.4.5)を指定しないといけなさそうだが、パス指定とかわからん。

一つ前(9.1-sysdja)のLFSだとGCCのバージョンが低いせいかZstd使っていない。


とりあえず、ライブラリ指定しないと行けないので
以下のファイルに「libzstd.a」追加してコンパイルした。
(libzstd.aは8.12.1. Zstd のインストールにて作成し、削除する前にスタティックライブラリをgccのフォルダにコピーした)

../../gcc/c/Make-lang.in 85
../../gcc/cp/Make-lang.in 120
../../gcc/lto/Make-lang.in 88,92

ダイナミックリンクライブラリを優先だけど、リンクの仕方わからなかったのでスタティックライブラリにしたんだ、ごめんな!
てか共有ライブ優先っぽいのにZlibのスタティックライブラリ消してないんですよね(Zstdは消してるのに)

よくわからないコンパイラオプション(--disable-lto)とか指定したりしました……

エラーで全然進んでないんだけど、少し詳しくなった感(諦めて最初からやろうとした)


コマンド残すとか、てかすべてにやったほうが良さそうなんだけど

make 2>&1 | tee Make.log

GCC, the GNU Compiler Collection
https://gcc.gnu.org/

Prerequisites for GCC - GNU Project - Free Software Foundation (FSF)
Prerequisites for GCC

zstd Library.
Necessary to build GCC with zstd compression used for LTO bytecode. The library is searched in your default library patch search. Alternatively, the --with-zstd configure option should be used.


.o : オブジェクトファイル object
.a : 静的(アーカイブ)ライブラリ
.so : 動的(共有)ライブラリ share object

/etc/ld.so.conf
ldconfig
ldconfig -p

ldd

タイトルとURLをコピーしました