樹莓派 2 和 3 上的 Swift 3 0

2021-09-18 03:39:22 字數 4464 閱讀 2950

當前,有許多人正在努力將 swift 3.0 引入到基於 arm 的系統中。通過本文你將了解如何在執行 ubuntu 16 (xenial xerus) 的樹莓派 2 或樹莓派 3 上構建並使用 swift 3.0。不過,我們暫時還沒有對它在 raspbian 系統上的可用性進行測試 (看起來並不可以)。

也許你還不知道支援樹莓派的 xenial 是存在的。不過沒關係,因為我以前也是!首先你可以通讀 ubuntu wiki 來了解它的核心內容,然後在樹莓派上部署它。建議使用至少 8g 的 sd 卡。

我們的團隊致力於在 arm 裝置上使用 swift,最近大家正在一台樹莓派 3 上通過 jenkins 來構建樹莓派專用的二進位制檔案。看,下圖就是構建裝置!

swift 3.0 構建裝置

如果你好奇這一切是如何進行的,可以檢視 jenkins 構建專案。坦率地說,我十分驚訝,因為它只花了 6 個小時就完成了 swift 的編譯。

shell

cd $home

wget

mkdir swift-3.0

cd swift-3.0 && tar -xzf ../swift-3.0.tgz

export path=$home/swift-3.0/usr/bin:$path

注意:把 swift 3.0 放在$home並不是強制性的,我通常使用的路徑是:/opt/swift/swift-3.0

一切就緒,讓我們馬上來體驗一下吧!

建立乙個名為helloworld.swift的檔案:

print("hello, world!")
然後你可以使用swift helloworld.swift語句來執行該檔案,就像執行指令碼一樣:

shell

# swift helloworld.swift

hello, world!

shell

# swiftc helloworld.swift

# ./helloworld

hello world!

shell

sudo apt-get update

sudo apt-get install -y libicu-dev

sudo apt-get install -y clang-3.6

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

接下來讓我們再來看一些有趣的小花絮吧:

swiftcat.swift:

import glibc

guard process.arguments.count == 2 else

let filename = process.arguments[1]

let bufsize = 1024

var pp = popen("cat " + filename, "r")

var buf = [cchar](repeating:0, count:bufsize)

while fgets(&buf, int32(bufsize), pp) != nil

exit(0)

編譯 (swiftc swiftcat.swift) 並執行 (swiftcat)!

escapetext.c:

c

#include #include #include int escapetext(const char* text, char** output)

} return rc;

}

escapetext.h:

c

int escapetext(const char* text, char** output);

import glibc

guard process.arguments.count == 2 else

let string = process.arguments[1]

var buffer:unsafemutablepointer? = nil

let rc = escapetext(string, &buffer)

guard rc > 0 else

if let escaped = buffer

exit(0)

shell

# clang -c escapetext.c

# swiftc -c escapeswift.swift -import-objc-header escapetext.h

# swiftc escapeswift.o escapetext.o -o escapeswift -lcurl

然後執行:

shell

# ./escapeswift "foo > bar"

escaped text: foo%20%3e%20bar

除非你很享受寫 makefile 和構建指令碼 (相信我,的確有人是這樣的),不然你可以在這裡使用 swift package manager 來協助管理軟體的包依賴。對於 swift 3.0 引入的 swiftpm,後面我們會寫更多與其相關的內容,說起來,swiftpm 提供了乙個能夠在 armv 7 裝置上工作的版本,這實在是一件令人很振奮的事情。不妨試一試下面的**:

shell

# mkdir finalcountdown && cd finalcountdown

# swift package init --type executable

creating executable package: finalcountdown

creating package.swift

creating .gitignore

creating sources/

creating sources/main.swift

creating tests/

然後再將sources/main.swift的內容替換為下面的**:

import foundation

import glibc

let thread = nsthread()

print("\nexiting thread")

print("done")

exit(0)

}thread.start()

select(0, nil, nil, nil, nil)

現在,執行swift build來構建你的 finalcountdown 應用:

shell

# swift build

compile swift module 'finalcountdown' (1 sources)

linking .build/debug/finalcountdown

# .build/debug/finalcountdown

entering thread

10...9...8...7...6...5...4...3...2...1...

exiting thread

done

如果你對在 x86 與 armv 7 系統上執行 swift 3.0 編寫的應用還是一知半解的話,可以看一看 moreswift 專案的 swift-3.0 分支。

當前的構建並非是針對 swift 3.0 預覽版進行的。如果需要驗證與 swift 二進位制檔案相關聯的 git 雜湊值,輸入swift --version即可:

shell

# swift --version

swift version 3.0-dev (llvm eb140647a6, clang a9f2183da4, swift bb43874ba1)

很多人都一直在努力將 swift 引入到 linux arm 裝置中。下面這份名單只提到了他們中很少的幾個人。推薦你去訪問他們的部落格;這些部落格蘊藏著很多寶貴的資訊和學習經驗。

swift3 0 問號和嘆號的理解

表示這個可選變數存在,可以使用,如果用 訪問不存在的可選變數會導致一些錯誤 表示這個變數可能不存在,如果不存在,所在語句後面的內容都不會執行 是乙個強制拆包,告訴編譯器我絕對肯定 能夠執行,如 strvalue hashvalue 如果不能執行則報錯。是表示乙個不確定,strvalue?hashva...

2 樹莓派音效卡設定和alsactl命令的使用

開啟音效卡調音介面 在終端輸入 其中f1鍵可以檢視幫助。接下來要講的是alsactl 命令,它可以管理音效卡的引數配置 預設引數檔案儲存在 var lib alsa asound.state檔案裡,我們可以把這個檔案的內容拷貝出來作為待恢復檔案。在終端輸入 alsactl h 檢視全部引數 儲存配置...

和前作相比,樹莓派3B 的功耗怎樣?

如果你在執行乙個電池供電的 pi,你知道它能執行多久嗎?我們這裡做一些簡單的測試,以便於你制定電力預算。實驗方式 乙個 hdmi 螢幕和乙個 usb 鍵盤 滑鼠轉換器連線,乙個5.2v的供電 電流限制 3 安培 線路,通過電表校準的20安培分流器,由uusb電源輸入pi。了解侷限性 了解任何裝置測試...