1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關咨詢
      選擇下列產品馬上在線溝通
      服務時間:8:30-17:00
      你可能遇到了下面的問題
      關閉右側工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      go語言編譯成c go編譯器是什么語言寫的

      go語言如何調用c函數(shù)

      直接嵌入c源代碼到go代碼里面

      成都創(chuàng)新互聯(lián)長期為近1000家客戶提供的網(wǎng)站建設服務,團隊從業(yè)經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為豐滿企業(yè)提供專業(yè)的網(wǎng)站設計制作、網(wǎng)站制作,豐滿網(wǎng)站改版等技術服務。擁有10年豐富建站經驗和眾多成功案例,為您定制開發(fā)。

      package main

      /*

      #include stdio.h

      void myhello(int i) {

      printf("Hello C: %d\n", i);

      }

      */

      import "C"

      import "fmt"

      func main() {

      C.myhello(C.int(12))

      fmt.Println("Hello Go");

      }

      需要注意的是C代碼必須放在注釋里面

      import "C"語句和前面的C代碼之間不能有空行

      運行結果

      $ go build main.go ./main

      Hello C: 12

      Hello Go

      分開c代碼到單獨文件

      嵌在一起代碼結構不是很好看,很多人包括我,還是喜歡把兩個分開,放在不同的文件里面,顯得干凈,go源文件里面是go的源代碼,c源文件里面是c的源代碼。

      $ ls

      hello.c hello.h main.go

      $ cat hello.h

      void hello(int);

      $ cat hello.c

      #include stdio.h

      void hello(int i) {

      printf("Hello C: %d\n", i);

      }

      $ cat main.go

      package main

      // #include "hello.h"

      import "C"

      import "fmt"

      func main() {

      C.hello(C.int(12))

      fmt.Println("Hello Go");

      }

      編譯運行

      $ go build ./main

      Hello C: 12

      Hello Go

      編譯成庫文件

      如果c文件比較多,最好還是能夠編譯成一個獨立的庫文件,然后go來調用庫。

      $ find mylib main

      mylib

      mylib/hello.h

      mylib/hello.c

      main

      main/main.go

      編譯庫文件

      $ cd mylib

      # gcc -fPIC -shared -o libhello.so hello.c

      編譯go程序

      $ cd main

      $ cat main.go

      package main

      // #cgo CFLAGS: -I../mylib

      // #cgo LDFLAGS: -L../mylib -lhello

      // #include "hello.h"

      import "C"

      import "fmt"

      func main() {

      C.hello(C.int(12))

      fmt.Println("Hello Go");

      }

      $ go build main.go

      運行

      $ export LD_LIBRARY_PATH=../mylib

      $ ./main

      Hello C: 12

      Hello Go

      在我們的例子中,庫文件是編譯成動態(tài)庫的,main程序鏈接的時候也是采用的動態(tài)庫

      $ ldd main

      linux-vdso.so.1 = (0x00007fffc7968000)

      libhello.so = ../mylib/libhello.so (0x00007f513684c000)

      libpthread.so.0 = /lib64/libpthread.so.0 (0x00007f5136614000)

      libc.so.6 = /lib64/libc.so.6 (0x00007f5136253000)

      /lib64/ld-linux-x86-64.so.2 (0x000055d819227000)

      理論上講也是可以編譯成整個一靜態(tài)鏈接的可執(zhí)行程序,由于我的機器上缺少靜態(tài)鏈接的系統(tǒng)庫,比如libc.a,所以只能編譯成動態(tài)鏈接。

      Go語言可能會代替C語言嗎

      不可能。Go到目前為止,其本身就是用C寫的。只是在語言層面實現(xiàn)了一些如果用C會很難寫的feature,比如goroutine。在1.5版本中,Go會bootstraping,用Go來編譯自己。

      C語言,幾乎每種操作系統(tǒng)的系統(tǒng)調用都是C,C最大的作用就是用來實現(xiàn)新的語言。

      Go 是怎么使用 Go 來編譯自身的

      Go是一個圖靈完備的語言

      任何圖靈完備的語言理論上都可以用來編譯自身。比如c/c++, java, vb, php等等都可以。

      至于怎么編譯自身的:

      用其它語言比如c++實現(xiàn)一個[Go語言編譯器-1]

      用Go語言寫一個[Go語言編譯器-2]

      用這個c++實現(xiàn)的[Go語言編譯器-1]編譯第2步里面說的Go語言寫的[Go語言編譯器-2]

      用第3步得到的[Go語言編譯器-2],再編譯一次第2步里面說的[Go語言編譯器-2]的源碼。

      OK,現(xiàn)在有一個Go語言實現(xiàn)的編譯器了,最開始那個c++寫的編譯器沒用了,可以扔掉不要了。以后就不停的優(yōu)化使用這個Go語言實現(xiàn)的自身的編譯器就行了。


      網(wǎng)站名稱:go語言編譯成c go編譯器是什么語言寫的
      文章分享:http://www.ef60e0e.cn/article/hhsdoc.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        虞城县| 石嘴山市| 台北县| 陇西县| 济南市| 馆陶县| 边坝县| 浦县| 临澧县| 嘉荫县| 金华市| 鲁山县| 天等县| 封开县| 西藏| 桃源县| 辽中县| 宜都市| 张家川| 莱阳市| 宁强县| 榆社县| 信宜市| 梁山县| 景德镇市| 乐陵市| 惠安县| 乌拉特后旗| 宿州市| 额尔古纳市| 汪清县| 冕宁县| 墨江| 平罗县| 固阳县| 湘潭县| 陆良县| 彭泽县| 吉安市| 大安市| 常熟市|