golang 通过 cgo 调用 C/C++ 静态库
hello.h
#ifndef HELLO_H_ #define HELLO_H_ #ifdef __cplusplus extern "C" { #endif extern int hello(char *name, int age); #ifdef __cplusplus } #endif #endif // HELLO_H_
hello.c
#include#include #include "hello.h" int hello(char *name, int age) { printf("Hello %s, your age is %d.\n", name, age); return age; }
hello.go
package main import ( "fmt" "log" "unsafe" ) /* #include#include #include "hello.h" #cgo CFLAGS: -I. #cgo LDFLAGS: -L. -lhello */ import "C" func main() { name := C.CString("jack") defer C.free(unsafe.Pointer(name)) age := C.int(28) fmt.Println(name) result := C.hello(name, age) log.Println("cgo----------->age %d ", result) }
编译C静态库
gcc -Wall -c hello.c ar -rv libhello.a hello.o