1. 编写C语言动态库:通过gcc编译器将C语言代码编译成共享库,例如:
gcc -shared -o libhello.so hello.c
libhello.sohello.c
syscallcgo
package main
import (
"fmt"
"syscall"
"unsafe"
)
func main() {
lib := syscall.NewLazyDLL("./libhello.so")
hello := lib.NewProc("hello")
hello.Call()
}
libhello.sohellosyscall.NewLazyDLL()lib.NewProc()Call()
3. 编写C语言头文件:Go代码中在调用动态库时需要知道动态库中的函数的原型,因此需要编写C语言头文件来定义函数原型,例如:
#ifndef HELLO_H
#define HELLO_H
void hello();
#endif
hello
import C//export
package main
/*
#include "hello.h"
*/
import "C"
func main() {
C.hello()
}
//export hello
func hello() {
println("Hello, world!")
}
//exporthello()import "C"