手順整理
- Cでロジックを書く
- Cのソースをスタティックライブラリにコンパイルする
- goでコールする
当たり前みたいに簡単笑
1. Cでロジックを書く
ヘッダー:
// helloLib/hello.h
#ifndef HELLO_H
#define HELLO_H
void hello(const char* name);
#endif
実装:
// helloLib/hello.c
#include <stdio.h>
#include "hello.h"
void hello(const char* name) {
printf("Hello from %s\n", name);
}
2. Cのソースをスタティックライブラリにコンパイルする
gcc -c helloLib/*.c
ar rs helloLib.a *.o
rm helloLib.o
3. goでコールする
package main
// #cgo CFLAGS: -I${SRCDIR}/helloLib
// #cgo LDFLAGS: ${SRCDIR}/helloLib.a
// #include <stdlib.h>
// #include <hello.h>
import "C"
// ↑goでCを使う時に基本的に
//「コメントアウトしたCコードの直後にimport "C"」
// という感じで書く
import "unsafe"
func main() {
name := C.CString("Go World") // CパッケージのCString関数でC用の文字列変数を作成
defer C.free(unsafe.Pointer(name)) // 終了時ポインターちゃんと解放されるように
C.hello(name)
}