2015-12-05 86 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