小編給大家分享一下go語言怎么調用c函數,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
成都創新互聯服務項目包括西藏網站建設、西藏網站制作、西藏網頁制作以及西藏網絡營銷策劃等。多年來,我們專注于互聯網行業,利用自身積累的技術優勢、行業經驗、深度合作伙伴關系等,向廣大中小型企業、政府機構等提供互聯網行業的解決方案,西藏網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到西藏省份的部分城市,未來相信會繼續擴大服務區域并繼續獲得客戶的支持與信任!
直接嵌入c源代碼到go代碼里面
package main/* #includevoid 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: 12Hello Go
分開c代碼到單獨文件
嵌在一起代碼結構不是很好看,很多人包括我,還是喜歡把兩個分開,放在不同的文件里面,顯得干凈,go源文件里面是go的源代碼,c源文件里面是c的源代碼。
$ ls hello.c hello.h main.go $ cat hello.h void hello(int);$ cat hello.c#includevoid 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: 12Hello 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: 12Hello Go
以上是“go語言怎么調用c函數”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創新互聯行業資訊頻道!