Go 语言如何调用 C 编写的 lib(.so)
如何在Go中调用由C语言编写并构建的动态链接库。我们将使用一个稍微复杂一些的示例,以便更好地理解整个过程。
- 创建和编译C库:
在同一个目录下,创建一个名为 mylib.c
的C文件,包含以下代码:
// mylib.c
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
然后编译这个C文件为 .so
文件:
gcc -shared -o libmylib.so -fPIC mylib.c
- 在Go中使用C库:
在同一个目录下,创建一个名为 main.go
的Go文件,包含以下代码:
package main
// #cgo LDFLAGS: -L. -lmylib
// #include <stdio.h>
// #include <stdlib.h>
// int add(int a, int b);
import "C"
import (
"fmt"
)
func main() {
result := C.add(C.int(3), C.int(5))
fmt.Printf("Result: %d\n", int(result))
}
- 编译Go程序并链接C库:
使用以下命令编译Go程序并链接C库:
go build main.go -o my_program
确保库文件 libmylib.so
和编译出的 my_program
位于同一目录下。
- 运行程序:
运行可执行程序 ./my_program
,你应该会看到输出结果 Result: 8
,这是因为Go程序成功调用了C库中的 add
函数。
如果你按照这个例子进行操作,并且遵循了正确的编译步骤,应该能够成功运行。如果仍然遇到问题,请确保没有遗漏步骤,库文件名和路径都是正确的,并且函数的声明和使用在C和Go之间匹配。