测试项目目录
./ ├── cgo_test ├── sum.cpp ├── sum.h └── test.go
c++代码 sum.cpp
#include <iostream> extern "C" { #include "sum.h" } int Sum(int a,int b) { int sum = a + b; return sum; }
cgo不能直接调用c++,将模块的接口函数在sum.h头文件进行定义,在sum.cpp中使用C++来重新实现这个C函数。
sum.h
int Sum(int a,int b);
c++生成静态库文件
g++ -c sum.cpp ar -crv libsum.a sum.o
生产静态库后的目录
./ ├── cgo_test ├── libsum.a ├── sum.cpp ├── sum.h ├── sum.o └── test.go
go代码
package main /* #include <stdio.h> #include <stdlib.h> #include "sum.h" #cgo CFLAGS: -I. #cgo LDFLAGS: -L. -lsum */ import "C" import "fmt" func main() { ret := C.Sum(2,3) fmt.Println(ret) }