我在使用Alpine Linux在Docker容器中安装和运行MLton 编译器时遇到问题。有没有办法在这个系统上安装这个编译器?
尝试#1
使用标准的 `alpine 基础镜像和 MLton 的二进制分布:
$ curl http://sourceforge.net/projects/mlton/files/mlton/20130715/mlton-20130715-1.amd64-linux.tgz --output mlton-20130715-1.amd64-linux.tgz
$ docker build .
使用以下 Dockerfile:
FROM alpine
COPY mlton-20130715-1.amd64-linux.tgz /
RUN apk add --no-cache bash build-base gmp-dev linux-headers \
&& tar xf /mlton-20130715-1.amd64-linux.tgz \
--directory /usr/ \
--strip-components 1 \
&& echo 'print "Hello, world!\n";' >> hello-world.sml \
&& mlton hello-world.sml
Docker 构建失败并显示以下错误消息,可能是因为glibc
缺少。
/usr/bin/mlton:第 52 行:/usr/lib/mlton/mlton-compile:没有这样的文件或目录
尝试#2
与上面相同,具有嵌入的基本 Docker 映像glibc
:
FROM frolvlad/alpine-glibc
这一次,mlton
运行,但产生以下错误:
/usr/lib/gcc/x86_64-alpine-linux-musl/6.4.0/../../../../x86_64-alpine-linux-musl/bin/ld: /usr/lib/mlton/ targets/self/libmlton.a(platform.o): 重定位 R_X86_64_32 对 `.rodata.str1.8' 在制作共享对象时不能使用;使用 -fPIC 重新编译
...
/usr/lib/gcc/x86_64-alpine-linux-musl/6.4.0/../../../../x86_64-alpine-linux-musl/bin/ld:最终链接失败:不可表示部分输出
collect2:错误:ld 返回 1 个退出状态
调用系统失败,退出状态为 1:
gcc -o hello-world /tmp/fileGEluFu.o /tmp/fileYnNjh9.o -L/usr/lib/mlton/targets/self -lmlton -lgdtoa -lm -lgmp -m64 -Wl,-znoexecstack
关于如何解决这个问题的任何想法?