摘要
介绍在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.gz
diveinedu@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