cgoの使い方メモ(不定期に更新)
- 参考文献
https://r9y9.github.io/blog/2014/03/22/cgo-tips/
https://hawksnowlog.blogspot.com/2018/12/getting-started-with-cgo.html - 取り敢えず、Goのプログラムの中からCの関数を使う方法
// go run main.go package main /* #include <stdio.h> #include <stdlib.h> void myprint(char* s) { printf("%s\n", s); } */ import "C" import "unsafe" func main() { cs := C.CString("Hello from stdio\n") C.myprint(cs) C.free(unsafe.Pointer(cs)) } // output // Hello from stdio
とか
package main /* #include <math.h> double MyPow(double x, double y) { double ret = pow(x, y); return ret; } */ import "C" import "fmt" func main() { ret := C.MyPow(10, 2) fmt.Println(ret) }
- 結構面倒くさい決まりごと
(1)import "C" の前には空行を入れない// #include <stdio.h> // #include <errno.h> import "C"
(2)C / C++ のコンパイラに渡すオプション(flag)を記述する
// #cgo CFLAGS: -I/usr/local/lib import C