Linux平台swift语言开发学习环境搭建

摘要 
介绍在Ubuntu平台搭建Swift开发环境; 介绍Swift脚本解析器swift的使用; 介绍Swift编译器swiftc的使用;

1.序言

这两天一直忙,没来得及记录东西,周三12月4日凌晨1点多看到苹果正式开源了Swift,国外各大媒体资讯动作超级快。我也兴奋的起来看了一遍关于Swift开源的最新消息。众所周知,苹果平台的Swift语言已经出来了一年半了,一直在成长,经历了好几个版本。许多人盼望的swift开源是希望可以在除了苹果平台之外的平台可以运用这个新语言。比如有人希望将来可以用swift也可以撸一撸后台开发之类,理论上是没问题的,但是同样也有人会喷这么一个愿景,但是开源一出后,多多少少社区人员会去往这个方面去努力的。苹果官方为swift新搞了个网站swift.org,也放出来了Ubuntu Linux平台的预编译好的swift工具链的打包文件以及Linux下的编译指南。我今天写这么一博客的目的就是为了介绍和推广Swift语言在初学者或者低年级大学生群体中的运用。

2.Swift+Ubuntu环境配置

首先假定我们已经安装好Ubuntu Linux操作系统了,这个系统安装很简单,网上很多的步骤教程,虚拟机的话推荐用VirtualBox。Swift支持Ubuntu 14.04和15.10两个发型版,我这选择15.10版本的包。

第一步:下载 Swift 2.2 工具链压缩包,打开终端,输入命令新建目录并下载

<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span style="font-size:18px;">diveinedu<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@diveinedu</span>-<span class="hljs-constant" style="box-sizing: border-box;">VirtualBox</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:~</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ </span>mkdir swift && cd swift;
diveinedu<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@diveinedu</span>-<span class="hljs-constant" style="box-sizing: border-box;">VirtualBox</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:~/swift</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ </span>wget <span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">https:</span>/<span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">/swift.org/builds</span><span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">/ubuntu1510/swift</span>-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2.2</span>-<span class="hljs-constant" style="box-sizing: border-box;">SNAPSHOT</span>-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2015</span>-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">12</span>-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">01</span>-b/swift-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2.2</span>-<span class="hljs-constant" style="box-sizing: border-box;">SNAPSHOT</span>-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2015</span>-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">12</span>-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">01</span>-b-ubuntu15.<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>.tar.gz</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">1</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">2</span></li></ul>

第二步:用tar命令解压 Swift 2.2 工具链压缩包到当前目录,并配置环境变量

先解压,再进入目录,目录下会有usr/bin和usr/lib等等子目录:bash diveinedu@diveinedu-VirtualBox:~/swift$ tar xvf swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10.tar.gzdiveinedu@diveinedu-VirtualBox:~/swift$ cd swift-2.2-SNAPSHOT-2015-12-01-b-ubuntu15.10/ 然后配置用户级别的环境变量,编辑$HOME/.bashrc配置文件

<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span style="font-size:18px;">diveinedu<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@diveinedu</span>-<span class="hljs-constant" style="box-sizing: border-box;">VirtualBox</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:~/swift/swift-</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2.2</span>-<span class="hljs-constant" style="box-sizing: border-box;">SNAPSHOT</span>-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2015</span>-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">12</span>-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">01</span>-b-ubuntu15.<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ </span>gedit <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$HOME</span>/.bashrc</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">1</span></li></ul>

上面命令会调出图形界面文本编辑器GEdit来编辑这个配置文件,在文件的最后输入如下配置行并保存退出编辑器

<code class="hljs bash has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span style="font-size:18px;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">export</span> SWIFT_HOME=<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$HOME</span>/swift/swift-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2.2</span>-SNAPSHOT-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2015</span>-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">12</span>-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">01</span>-b-ubuntu15.<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">export</span> PATH=<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$SWIFT_HOME</span>/usr/bin:<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$PATH</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">export</span> LD_LIBRARY_PATH=<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$SWIFT_HOME</span>/usr/lib:<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$LD_LIBRARY_PATH</span>
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">export</span> LIBRARY_PATH=<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$SWIFT_HOME</span>/usr/lib:<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$LIBRARY_PATH</span></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">1</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">2</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">3</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">4</span></li></ul>

这样环境变量就配置OK啦。这个时候我们只需要关闭我们的Shell终端重新打开终端就生效了。

3.Swift+Ubuntu初次体验

搞过iOS开发的都知道,2014年6月Swift刚出世时就随Xcode带了Playground功能,可以边写边看运行结果,辣么在Ubuntu Linux下有没有类似的呢,也有,只是没那么强大的IDE支持,我们一样可以运行类似Pyhton脚本解析器一样的Swift解析器,同步输入Swift代码来“解析”运行。这个命令就是swift,在上面的环境变量设置完后重开终端就可以直接使用了,如下所示。

<code class="hljs coffeescript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span style="font-size:18px;">diveinedu<span class="hljs-property" style="box-sizing: border-box;">@diveinedu</span>-<span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">VirtualBox</span>:~$ swift
Welcome to Swift version <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2.2</span>-dev (LLVM <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">46</span>be9ff861, Clang <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>deb154edc, Swift <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">778</span>f82939c). Type :help <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> assistance.
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>> <span class="hljs-reserved" style="box-sizing: border-box;">let</span> hello = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"hello"</span>;
<span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">hello</span>: String = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"hello"</span>
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>> <span class="hljs-reserved" style="box-sizing: border-box;">let</span> world = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"diveinedu"</span>
<span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">world</span>: String = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"diveinedu"</span>
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>> <span class="hljs-reserved" style="box-sizing: border-box;">let</span> space = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">" "</span>
<span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">space</span>: String = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">" "</span>
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">print</span>(hello+space+world);
hello diveinedu
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>>hello.
Available <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">completions</span>:
    append<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(c: Character)</span> -></span> Void
    append<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(x: UnicodeScalar)</span> -></span> Void
    appendContentsOf<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(newElements: S)</span> -></span> Void
    appendContentsOf<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(other: String)</span> -></span> Void
    <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">characters</span>: String.CharacterView
    <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">debugDescription</span>: String
    <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">endIndex</span>: Index
    <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">hashValue</span>: Int
    insert<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(newElement: Character, atIndex: Index)</span> -></span> Void
    insertContentsOf<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(newElements: S, at: Index)</span> -></span> Void
    <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">isEmpty</span>: Bool
    <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">lowercaseString</span>: String
    <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">nulTerminatedUTF8</span>: ContiguousArray<CodeUnit>
    removeAll<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span> -></span> Void
    removeAll<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(keepCapacity: Bool)</span> -></span> Void
    removeAtIndex<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(i: Index)</span> -></span> Character
    removeRange<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(subRange: Range<Index>)</span> -></span> Void
    replaceRange<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(subRange: Range<Index>, <span class="hljs-reserved" style="box-sizing: border-box;">with</span>: C)</span> -></span> Void
    replaceRange<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(subRange: Range<Index>, <span class="hljs-reserved" style="box-sizing: border-box;">with</span>: String)</span> -></span> Void
    reserveCapacity<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(n: Int)</span> -></span> Void
    <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">startIndex</span>: Index
    <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">unicodeScalars</span>: String.UnicodeScalarView
    <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">uppercaseString</span>: String
    <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">utf16</span>: String.UTF16View
    <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">utf8</span>: String.UTF8View
    withCString<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(f: UnsafePointer<Int8> throws -> ResultUnsafePointer<Int8> throws -> Result)</span> -></span> Result
    withMutableCharacters<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(body: (inout String.CharacterView) -> R(inout String.CharacterView) -> R)</span> -></span> R
    write<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(other: String)</span> -></span> Void
    writeTo<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(&target: Target)</span> -></span> Void
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">6</span>> hello.isEmpty
<span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">$R0</span>: Bool = <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">1</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">2</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">3</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">4</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">5</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">6</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">7</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">8</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">9</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">10</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">11</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">12</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">13</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">14</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">15</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">16</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">17</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">18</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">19</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">20</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">21</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">22</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">23</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">24</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">25</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">26</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">27</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">28</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">29</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">30</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">31</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">32</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">33</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">34</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">35</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">36</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">37</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">38</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">39</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">40</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">41</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">42</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">43</span></li></ul>

在这个解析执行界面还有自动提示补全功能!简直四国矣.上面第五行是输入hello后再输入一点.然后按tab键,一下就出来这么多关于字符串的方法,妈妈再也不担心我在终端模式下不记得方法名了。

上面这特简单的几行代码还没包含类和对象,下面看看在swift解析器中直接输入类的定义和对象创建和简单使用。

<code class="hljs coffeescript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span style="font-size:18px;">diveinedu<span class="hljs-property" style="box-sizing: border-box;">@diveinedu</span>-<span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">VirtualBox</span>:~$ swift
Welcome to Swift version <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2.2</span>-dev (LLVM <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">46</span>be9ff861, Clang <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>deb154edc, Swift <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">778</span>f82939c). Type :help <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> assistance.
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>> struct Resolution {
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2.</span>     <span class="hljs-reserved" style="box-sizing: border-box;">var</span> width = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3.</span>     <span class="hljs-reserved" style="box-sizing: border-box;">var</span> height = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4.</span> }
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5.</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">VideoMode</span> {</span>
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">6.</span>     <span class="hljs-reserved" style="box-sizing: border-box;">var</span> resolution = Resolution()
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">7.</span>     <span class="hljs-reserved" style="box-sizing: border-box;">var</span> interlaced = <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8.</span>     <span class="hljs-reserved" style="box-sizing: border-box;">var</span> frameRate = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.0</span>
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">9.</span>     <span class="hljs-reserved" style="box-sizing: border-box;">var</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">name</span>: String?
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10.</span>     func description()
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">11.</span>     {
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">12.</span>       <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">print</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"name:\(name) frameRate:\(frameRate)"</span>)
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">13.</span>     }
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">14.</span> }
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">15</span>> <span class="hljs-reserved" style="box-sizing: border-box;">let</span> mode = VideoMode()
<span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">mode</span>: VideoMode = {
  resolution = {
    width = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>
    height = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>
  }
  interlaced = <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>
  frameRate = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>
  name = nil
}
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">16</span>> mode.name = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"1080p HD"</span>
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">17</span>> mode.frameRate = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">30.0</span>
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">18</span>> mode.description()
<span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">name</span>:Optional(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"1080p HD"</span>) <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">frameRate</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">30.0</span>
 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">19</span>></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">1</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">2</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">3</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">4</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">5</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">6</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">7</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">8</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">9</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">10</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">11</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">12</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">13</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">14</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">15</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">16</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">17</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">18</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">19</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">20</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">21</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">22</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">23</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">24</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">25</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">26</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">27</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">28</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">29</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">30</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">31</span></li></ul>

这些都只是在swift解析器中临时性的运行一些代码,如果我们需要新建.swift格式文件然后编译成可执行二进制文件形式又要怎样做呢,同样很简单,我们可以用swiftc这个命令来编译。 我们可以新建一个目录来存放swift代码文件,然后编辑一个test.swift:

<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span style="font-size:18px;">diveinedu<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@diveinedu</span>-<span class="hljs-constant" style="box-sizing: border-box;">VirtualBox</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:~</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ </span>mkdir -p <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$HOME</span>/swift/swiftcode
diveinedu<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@diveinedu</span>-<span class="hljs-constant" style="box-sizing: border-box;">VirtualBox</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:~</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ </span>cd  <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$HOME</span>/swift/swiftcode
diveinedu<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@diveinedu</span>-<span class="hljs-constant" style="box-sizing: border-box;">VirtualBox</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:~/swift/swiftcode</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ </span>gedit test.swift</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">1</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">2</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">3</span></li></ul>

当打开gedit文本编辑器后,输入上面的类和对象创建以及方法调用的代码,列出在下面

<code class="hljs coffeescript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span style="font-size:18px;">struct Resolution {
    <span class="hljs-reserved" style="box-sizing: border-box;">var</span> width = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>
    <span class="hljs-reserved" style="box-sizing: border-box;">var</span> height = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>
}
<span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">VideoMode</span> {</span>
    <span class="hljs-reserved" style="box-sizing: border-box;">var</span> resolution = Resolution()
    <span class="hljs-reserved" style="box-sizing: border-box;">var</span> interlaced = <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>
    <span class="hljs-reserved" style="box-sizing: border-box;">var</span> frameRate = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.0</span>
    <span class="hljs-reserved" style="box-sizing: border-box;">var</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">name</span>: String?
    func description()
    {
      <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">print</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"name:\(name) frameRate:\(frameRate)"</span>)
    }
}
<span class="hljs-reserved" style="box-sizing: border-box;">let</span> mode = VideoMode()
mode.name = <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"1080p HD"</span>
mode.frameRate = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">30.0</span>
mode.description()</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">1</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">2</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">3</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">4</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">5</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">6</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">7</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">8</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">9</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">10</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">11</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">12</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">13</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">14</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">15</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">16</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">17</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">18</span></li></ul>

保存后关闭编辑器,然后执行swiftc test.swift来编译源文件,会出现如下链接错误:

<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span style="font-size:18px;">diveinedu<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@diveinedu</span>-<span class="hljs-constant" style="box-sizing: border-box;">VirtualBox</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:~/swift/swiftcode</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ </span>swiftc test.swift
<unknown><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:</span> <span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">error:</span> link command failed with exit code <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">127</span> (use -v to see invocation)
diveinedu<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@diveinedu</span>-<span class="hljs-constant" style="box-sizing: border-box;">VirtualBox</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:~/swift/swiftcode</span>$</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">1</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">2</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">3</span></li></ul>

解决办法是安装编译依赖clang libicu-dev,输入下面命令回车(会询问当前用户密码)bash diveinedu@diveinedu-VirtualBox:~/swift/swiftcode$ sudo apt-get install clang libicu-dev 安装完成后再次执行编译命令swiftc test.swift就顺利编译成功,再当前目录下输出test可执行文件。

<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span style="font-size:18px;">diveinedu<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@diveinedu</span>-<span class="hljs-constant" style="box-sizing: border-box;">VirtualBox</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:~/swift/swiftcode</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ </span>swiftc test.swift
diveinedu<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@diveinedu</span>-<span class="hljs-constant" style="box-sizing: border-box;">VirtualBox</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:~/swift/swiftcode</span><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ </span>./test
<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">name:</span><span class="hljs-constant" style="box-sizing: border-box;">Optional</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"1080p HD"</span>) <span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">frameRate:</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">30.0</span></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">1</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">2</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">3</span></li></ul>

而且执行ldd ./test查看此二进制文件依赖的动态库可知,它链接了libswiftCore,这是所有swift程序都会需要的。

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span style="font-size:18px;">diveinedu@diveinedu<span class="hljs-attribute" style="box-sizing: border-box;">-VirtualBox</span>:~/swift/swiftcode$ ldd <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>/test
    linux<span class="hljs-attribute" style="box-sizing: border-box;">-vdso</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.1</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=></span>  (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00007ffcef3f5000</span>)
    libswiftCore<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=></span> /home/diveinedu/swift/swift<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2.2</span><span class="hljs-attribute" style="box-sizing: border-box;">-SNAPSHOT</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2015</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">12</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">01</span><span class="hljs-attribute" style="box-sizing: border-box;">-b</span><span class="hljs-attribute" style="box-sizing: border-box;">-ubuntu15</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.10</span>/usr/lib/swift/linux/libswiftCore<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00007f1cd2f75000</span>)
    libstdc<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">++</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.6</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=></span> /usr/lib/x86_64<span class="hljs-attribute" style="box-sizing: border-box;">-linux</span><span class="hljs-attribute" style="box-sizing: border-box;">-gnu</span>/libstdc<span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">++</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.6</span> (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00007f1cd2bdd000</span>)
    libm<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.6</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=></span> /lib/x86_64<span class="hljs-attribute" style="box-sizing: border-box;">-linux</span><span class="hljs-attribute" style="box-sizing: border-box;">-gnu</span>/libm<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.6</span> (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00007f1cd28d5000</span>)
    libgcc_s<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.1</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=></span> /lib/x86_64<span class="hljs-attribute" style="box-sizing: border-box;">-linux</span><span class="hljs-attribute" style="box-sizing: border-box;">-gnu</span>/libgcc_s<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.1</span> (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00007f1cd26be000</span>)
    libc<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.6</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=></span> /lib/x86_64<span class="hljs-attribute" style="box-sizing: border-box;">-linux</span><span class="hljs-attribute" style="box-sizing: border-box;">-gnu</span>/libc<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.6</span> (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00007f1cd22f3000</span>)
    libpthread<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.0</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=></span> /lib/x86_64<span class="hljs-attribute" style="box-sizing: border-box;">-linux</span><span class="hljs-attribute" style="box-sizing: border-box;">-gnu</span>/libpthread<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.0</span> (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00007f1cd20d5000</span>)
    libdl<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.2</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=></span> /lib/x86_64<span class="hljs-attribute" style="box-sizing: border-box;">-linux</span><span class="hljs-attribute" style="box-sizing: border-box;">-gnu</span>/libdl<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.2</span> (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00007f1cd1ed1000</span>)
    libicuuc<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.55</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=></span> /usr/lib/x86_64<span class="hljs-attribute" style="box-sizing: border-box;">-linux</span><span class="hljs-attribute" style="box-sizing: border-box;">-gnu</span>/libicuuc<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.55</span> (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00007f1cd1b3c000</span>)
    libicui18n<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.55</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=></span> /usr/lib/x86_64<span class="hljs-attribute" style="box-sizing: border-box;">-linux</span><span class="hljs-attribute" style="box-sizing: border-box;">-gnu</span>/libicui18n<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.55</span> (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00007f1cd16d9000</span>)
    libbsd<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.0</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=></span> /lib/x86_64<span class="hljs-attribute" style="box-sizing: border-box;">-linux</span><span class="hljs-attribute" style="box-sizing: border-box;">-gnu</span>/libbsd<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.0</span> (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00007f1cd14c9000</span>)
    /lib64/ld<span class="hljs-attribute" style="box-sizing: border-box;">-linux</span><span class="hljs-attribute" style="box-sizing: border-box;">-x86</span><span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">64.</span>so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.2</span> (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x0000556e488b7000</span>)
    libicudata<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.55</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">=></span> /usr/lib/x86_64<span class="hljs-attribute" style="box-sizing: border-box;">-linux</span><span class="hljs-attribute" style="box-sizing: border-box;">-gnu</span>/libicudata<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>so<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.55</span> (<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0x00007f1ccfa11000</span>)</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">1</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">2</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">3</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">4</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">5</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">6</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">7</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">8</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">9</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">10</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">11</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">12</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">13</span></li><li style="box-sizing: border-box; padding: 0px 5px;"><span style="font-size:18px;">14</span></li></ul>

细心的读者会发现好像不见main函数或者main相关的函数,程序照样可以运行,不管是脚本还是编译成二进制可执行文件,这个我以后再细说了。


转自:http://blog.csdn.net/diveinedu/article/details/50214901

你可能感兴趣的:(ios,linux,ubuntu,swift)