Alpine Linuxでgccの最新版をビルドしてみます。
apk add --no-cache make build-base
wget https://ftp.iij.ad.jp/pub/gnu/gcc/gcc-14.1.0/gcc-14.1.0.tar.xz
tar -xvf gcc-14.1.0.tar.xz
cd gcc-14.1.0
./contrib/download_prerequisites
cd ..
mkdir objdir
cd objdir
./../gcc-14.1.0/configure --disable-multilib
make all-gcc
make all-target-libgcc
make install-gcc
make install-target-libgcc
今回は、Docker上のAlpine Linuxでビルドしました。
Dockerイメージをcommitしましょう。
C:\>docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
08deda41ee8b f386d2e32cb3 "sh" About an hour ago Exited (0) 12 seconds ago epic_allen
C:\>docker commit 08deda41ee8b kazu_gcc:14.1.0
sha256:c99dd5dcd3148c8c8dffddb23c3e9d71503491accba67dd67a4254ada8c6c121
コンテナIDでcommitしました。これをsaveすれば他PCでも使用できます。
作成したイメージを使って実行環境を構築します。
試すCソースは以下です。
hello.c
#include <stdio.h>
void main(void) {
printf("Hello, world!\n");
}
これを使うためのDockerfileは以下です。
DockerfileExec
FROM kazu_gcc:14.1.0 as builder
RUN mkdir /src
COPY hello.c /src
RUN /usr/local/bin/gcc /src/hello.c -o /src/hello
FROM alpine
COPY --from=builder /src/hello /bin/
CMD ["/bin/hello"]
作成した実行イメージを起動してみます。
C:\>docker run kazu_gcc:exec
Hello, world!
C:\>
実行形式に依存している共有ライブラリは以下となります。
~ # ldd /bin/hello
/lib/ld-musl-x86_64.so.1 (0x7fe5bc305000)
libc.musl-x86_64.so.1 => /lib/ld-musl-x86_64.so.1 (0x7fe5bc305000)