您好,登錄后才能下訂單哦!
小編給大家分享一下go語言怎么調用c函數,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
直接嵌入c源代碼到go代碼里面
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: 12Hello 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: 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函數”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。