您现在的位置是:网站首页> Go语言
Go中调用C的动态库与静态库
- Go语言
- 2021-04-09
- 908人已阅读
摘要
最近在学习GO语言,作为一门基于C语言的语言。对于它的语法很快掌握了,其实本人很早就想写一些关于GO的文章了,今天抽空就写一下,费话不说了,直击主题好了。 以下代码是在Linux运行的结果,若用GDB调试,最好安装7.1以上版本。
一、Go调用C的动态库:
1、创建C的头文件
// foo.h
extern int Num; // 提供给 go调用
void foo();
2、创建C的源文件
// foo.c
int Num = 6;
void foo()
{
printf("I'm Langston!\n");
}
3、创建go源文件
// CgoTest project main.go
package main
// #include "foo.h"
import "C"
import "fmt"
func main() {
fmt.Println(C.Num)
C.foo()
}
4、生成动态库(libfoo.so, 在Linux下叫共享库,我口误 )
gcc -c foo.c
gcc -shared -Wl,-soname,libfoo.so -o libfoo.so foo.o
5、使用go工具编译项目
go build
6、运行生成的执行档
./CgoTest
二、 Go调用C的静态库:
只有第3、第4步不一样,其他都一样的。这里只针对这两步做处理。
3、 创建go源文件
// CgoTest project main.go
package main
// #cgo LDFLAGS: -L ./ -lfoo
// #include "foo.h"
import "C"
import "fmt"
func main() {
fmt.Println(C.Num)
C.foo()
}
4、生成静态库 (libfoo.a)
gcc -c foo.c
ar -rv libfoo.a foo.o
下一篇:Go动态调用dll