Crystal lang 我能';t在alpinedge下建立静态二进制的crystal程序
我正在尝试编译最简单的crystal程序,但使用Crystal lang 我能';t在alpinedge下建立静态二进制的crystal程序,crystal-lang,Crystal Lang,我正在尝试编译最简单的crystal程序,但使用--static标志: 守则: #x.cr “测试” 汇编: crystal build --static x.cr 结果是: /usr/lib/gcc/x86_64-alpine-linux-musl/8.3.0/../../../../x86_64-alpine-linux-musl/bin/ld: cannot find -lgc (this usually means you need to install the developmen
--static
标志:
守则:
#x.cr
“测试”
汇编:
crystal build --static x.cr
结果是:
/usr/lib/gcc/x86_64-alpine-linux-musl/8.3.0/../../../../x86_64-alpine-linux-musl/bin/ld: cannot find -lgc (this usually means you need to install the development package for libgc)
collect2: error: ld returned 1 exit status
Error: execution of command failed with code: 1: `cc "${@}" -o '/app/x' -rdynamic -static /usr/lib/libpcre.a -lgc /usr/lib/libpthread.a /usr/lib/crystal/core/ext/libcrystal.a /usr/lib/libevent.a /usr/lib/librt.a -L/usr/lib -L/usr/local/lib`
我猜我少了一些apk的包。我尝试了gc
,gc-dev
,musl-dev
-运气不好-是与包相关,还是我遗漏了什么
apk add crystal shards
# equivalent to build-essentials
apk add --virtual build-dependencies build-base gcc
# or a more complete build dependencies pkg:
# apk add --update alpine-sdk
crystal build --static x.cr
我已经在一个全新的阿尔卑斯山容器上测试过了。它缺失了,但这是回购协议中Crystal包所要求的(如果您从那里安装Crystal)。不过,您可能需要该版本,正如。中所述,答案似乎是
gc-dev
不再在edge
上提供静态库。过去是这样,直到3.9
的版本中仍然存在这种情况
有一个PR可以解决这个问题:你使用的是什么版本的Crystal?你是如何安装的?对不起,我的错-这是最重要的信息。我使用了阿尔卑斯山:边缘docker图像和水晶0.27.2-r0.Hm,这真的很奇怪
crystal
onalpine:edge
依赖于此处明显缺失的gc开发。你能确保它安装正确吗?是的,我也安装了gc-dev
。但是我注意到,大多数软件包也有一个*-static
版本(即sqlite static
等)。存储库中没有gc static
包-可能是这样的。谢谢您的帮助-不过我试过了。问题是,我使用的是alpine:edge
图像,因为我需要crystal0.27.2
(不是针对这个特定的代码,而是针对更大的项目)。使用virtutal
软件包或alpine sdk
会引发相同的错误。谢谢!这就是我一直在寻找的答案。我下载了gc
源代码和Alpine提供的补丁,并使用--enable static
手动编译了它。对于正在为此而挣扎的人们,这里是我的Dockerfile中的一段摘录:运行apk add alpine sdk libatomic_ops-dev linux headers WORKDIR/tmp/gc RUN patch-p1