如何在rapsberry pi上安装crystal-lang?

时间:2017-03-14 20:40:28

标签: arm raspberry-pi3 crystal-lang

当我尝试按照debian install instructions将其添加到源时,我收到此错误。我猜这意味着它没有手臂包。

  

无法获取https://dist.crystal-lang.org/apt/dists/crystal/InRelease无法在发布文件中找到预期的条目“main / binary-armhf / Packages”(错误的sources.list条目或格式错误的文件)

我猜我可能需要从源代码安装它。我怎么会用arm cpu做这件事?当我检查并运行make时,我收到错误:

  

你需要在你的道路上有一个水晶可执行文件! Makefile中:113:   目标'.build / crystal'的配方失败了:*** [.build / crystal]   错误1

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:18)

编辑:现在有一个半官方的水磨石藏书库,请点击这里查看:http://public.portalier.com/raspbian

Crystal不会为ARM构建Debian软件包,而且你需要从源代码构建它是正确的。

但是,Crystal编译器是用Crystal编写的。这提出了如何让编译器构建编译器的明显问题。答案是交叉编译:在x86台式计算机上构建arm二进制文件并将其复制。

基于我上次交叉编译的记忆,这是一个快速的步骤:

  1. 在x86台式机上安装Crystal,并检查它是否有效。
  2. 在桌面和Raspberry Pi上安装all required libraries。您需要在Raspberry Pi和桌面上使用相同的LLVM版本。这可能是最艰难和最长的一步。您可以从debian testing为ARM安装llvm 3.9,有关如何仅从debian测试安装LLVM的信息,请参阅this stackoverflow post
  3. 在两台计算机上查看来自git的来源,然后运行make deps
  4. 通过在git存储库的根目录中运行此命令来交叉编译编译器:
    ./bin/crystal build src/compiler/crystal.cr --cross-compile --target arm-unknown-linux-gnueabihf --release -s -D without_openssl -D without_zlib
    此命令将在当前目录中创建crystal.o文件,并输出链接器命令(cc crystal.o -o crystal ...)。
  5. crystal.o复制到raspberry pi,然后运行链接器命令。请务必编辑llvm_ext.o的绝对路径,使其指向Raspberry Pi上的Crystal结帐,而不是桌面上的结帐。还要确保命令中对llvm-config的所有引用都是针对正确的LLVM版本的。例如,在Raspbian上将/usr/local/bin/llvm-config更改为llvm-config-3.9
  6. 在当前目录(./crystal -v)中运行crystal可执行文件并确保其正常工作。
  7. 确保将CRYSTAL_PATH环境变量设置为lib:/path/to/crystal/source/checkout/src,以便编译器在编译应用程序时可以找到标准库。