以下是使用 Go 语言打包成 .so
库并使用 C 语言调用的完整步骤:
1. Go 语言打包成 .so
库
(1)编写 Go 代码
创建一个 Go 文件(如 calculator.go
),并定义需要导出的函数。导出的函数名必须以大写字母开头,并在函数前添加 //export
注释。
package mainimport "C"
import "fmt"//export Add
func Add(a, b int) int {return a + b
}func main() {}
(2)编译生成 .so
库
在终端中进入项目目录,运行以下命令:
go build -buildmode=c-shared -o libcalculator.so calculator.go
这将生成 libcalculator.so
文件,即打包好的动态链接库。
2. 使用 C 语言调用 .so
库
(1)编写 C 代码
创建一个 C 文件(如 main.c
),并包含生成的头文件(calculator.h
),调用导出的函数。
#include "calculator.h"int main() {int result = Add(10, 20);printf("Result: %d\n", result);return 0;
}
(2)编译和运行
在终端中运行以下命令:
gcc -o main main.c libcalculator.so
./main
运行结果应为:
Result: 30
注意事项
- 头文件:生成的
.so
库会附带一个对应的头文件(如calculator.h
),C 代码需要包含这个头文件。 - 路径问题:确保
.so
库文件的路径正确,或者将其路径添加到系统的LD_LIBRARY_PATH
环境变量。 - 数据类型:Go 和 C 的数据类型需要匹配,例如 Go 的
int
对应 C 的int
。
通过以上步骤,你可以将 Go 语言的功能封装为 .so
库,并在 C 语言中调用这些功能。