手順:
- Goで関数を作成、
//export
コメントを利用してexportする - Goをライブラリにコンパイルする(ヘッダーファイルも生成される)
- Cで生成されたヘッダーファイルを
include
してコールする
1. Goで関数を作成、//export
コメントを利用してexportする
// functionsInGo.go
package main
import "C"
import "fmt"
//export hello
func hello(name string) {
fmt.Println("Hello from GO!", name)
}
func main() {
}
//export hello
というコメントは、goのコンパイラに「この関数をexportする」と伝達するので、略してはいけない (コメントの記述だけど、コメントじゃない笑)
2. Goをライブラリにコンパイルする(ヘッダーファイルも生成される)
go build -o functionsInGo.o -buildmode=c-shared functionsInGo.go
上記のコマンドを叩くと、functionsInGo.h
とfunctionsInGo.o
が生成される。
3. Cで生成されたヘッダーファイルをinclude
してコールする
// hello.c
#include <stdio.h>
#include "functionsInGo.h"
int main(int argc, char **argv) {
GoString name = {"World!", 6};
hello(name);
return 0;
}
コンパイルしてコールすると:
gcc -o hello hello.c ./functionsInGo.o
./hello
Hello from GO! World!