2015-12-05 83 views
16

Swift现在是开源版。有没有人试过编译Swift来获得Raspberry PI?我开始这样做,但我的8 GB SD卡似乎太小了;)是否可以从Ubuntu进行交叉编译?(Cross-)编译Swift for Raspberry PI

+0

8GB太小?你能详细说明一下吗?即使iOS不占用8GB。 –

+0

对于编译...有一个错误“致命错误:后端错误:IO输出流失败。” – Lupurus

+0

是的,这似乎是一个磁盘空间不足的错误。互联网上的一些人有一些重启的成功。你可以编译到不同的位置,并检查产生的大小? –

回答

7

8GB SD卡工作正常,但您需要扩展根卷。我有它的工作和/dev/root分区上使用的空间大约3.1GB。

以下步骤基于Andrew Madsen的博客文章,稍微额外注重fdisk中的步骤。

获得Ubuntu的

下载的Ubuntu 14.04的图像树莓派2从finnie.org并将其复制到SD卡上。启动树莓派。

改变分区

登录到树莓Pi和改变分区大小。 /dev/root的默认大小为1.7G,可用1.1G。这还不够。

$ df -h 

Filesystem  Size Used Avail Use% Mounted on 
/dev/root  1.7G 540M 1.1G 35%/
devtmpfs  458M 4.0K 458M 1% /dev 
none   4.0K  0 4.0K 0% /sys/fs/cgroup 
none    93M 228K 93M 1% /run 
none   5.0M  0 5.0M 0% /run/lock 
none   462M  0 462M 0% /run/shm 
none   100M  0 100M 0% /run/user 
/dev/mmcblk0p1 64M 20M 45M 31% /boot/firmware 

运行fdisk

sudo fdisk /dev/mmcblk0 

在提示符下输入p为 '打印分区表'。有两个分区

/dev/mmcblk0p1 *  2048  133119  65536 c W95 FAT32 (LBA) 
/dev/mmcblk0p2   133120  3670015  1768448 83 Linux 

出现提示时,输入d(用于删除),然后2。然后,通过输入n,然后p,然后2,然后在接下来的两个接受默认值的提示处按回车来重新创建分区。

再次输入p并看到第二个分区现在变大,现在使用8GB卡上的所有空间。

  Device Boot  Start   End  Blocks Id System 
/dev/mmcblk0p1 *  2048  133119  65536 c W95 FAT32 (LBA) 
/dev/mmcblk0p2   133120 15523839  7695360 83 Linux 

输入w将更改写入到磁盘,然后重新启动

sudo reboot 

调整分区大小

重新启动后,通过运行

sudo resize2fs /dev/mmcblk0p2 

调整分区的文件系统交换空间

设置做

sudo apt-get install dphys-swapfile 

安装libicu-dev的和铛-3交换文件。6

sudo apt-get install libicu-dev clang-3.6 

使用更新的替代品,以提供铛和铛的/ usr/bin中的链接++:

sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-3.6 100 
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-3.6 100 

然后,添加@ iachievedit的存储库密钥:

wget -qO- http://dev.iachieved.it/iachievedit.gpg.key | sudo apt-key add - 

添加适当的库to sources.list:

echo "deb [arch=armhf] http://iachievedit-repos.s3.amazonaws.com/ trusty main" | sudo tee --append /etc/apt/sources.list 

运行apt-get更新:

sudo apt-get update 

安装斯威夫特

sudo apt-get install swift-2.2 

安装完成后,您就可以编译斯威夫特程序!

写斯威夫特

打开文本编辑器,写一个程序,并保存(如为 'hello.swift'):

let device = "Raspberry Pi 2!" 
print("Hello from Swift on \(device)") 

编译

swiftc hello.swift 

和运行它:

./hello 

Hello from Swift on Raspberry Pi 2! 

就是这样!在树莓派斯威夫特运行

+0

很高兴知道这里有一个预编译的软件包。你/你能确认它是值得信赖的吗? - http://dev.iachieved.it声称拥有该桶。 +1。 – jweyrich

+0

我已决定现在信任它:)在上面引用的博客上说:“William Dillon(@ hpux735)宣布他已经获得了Swift编译器,成功构建了armv7系统,比如BeagleBone,Raspberry Pi 2等。一段时间后,@iachievedit打包了William的工作,并通过apt-get为Debian和Ubuntu提供了可用的工具。' – Olaf

+3

关于如何真正交叉*编译它会很好(例如,构建在OS X上,部署在Rasperry Pi)。 – adib

2

雨燕软件包管理器通过2017年四月

PR-1098 结束了自定义的工具链支持,我写了关于如何在这里建立一个树莓派工具链的详细说明:macOS -> RasPi Cross Compilation Toolchain 甚至反向(build macOS binaries on a RaspberryPi)为它的乐趣。 同样适用于Intel-Linux到ARM-Linux的最小修改。 SwiftPM回购版包含一个example script关于如何为Intel-macOS到Intel-Ubuntu做到这一点。

你可以在这里找到一个关于ARM上的Swift的2017-05-01更新: An Update on Swift 3.1.1 For Raspberry Pi Zero/1/2/3

作为一个小总结,所以这个答案不只是链接;-),ARM状态2017年5月16日:

  • 你可以在Ubuntu的树莓派 编译雨燕3.1/3.1.1
    • 不要忘记安装swap,对于3.1.1需要一些最小的补丁 。 8GB的磁盘可能会有点小。
  • 关于Raspbian的汇编似乎还没有工作(最后的已知版本 是3.0。2)
  • 您可以使用雨燕的自定义工具链,这是 合理易于安装交叉编译
    • 你需要抓住这一个SwiftPM快照(斯威夫特4)(但工具链本身可以是3.1或甚至3.0.2 w /小的变化)
  • 你也可以运行(和编译)Swift via Docker, eg在HypriotOS。
  • 存在对斯威夫特ARM松弛组:swift-arm