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"