golang 动态连接库
时间: 2023-07-27 17:27:19 浏览: 219
Go语言支持动态链接库,也称为共享库,它们可以在运行时加载并链接到程序中。在Go语言中,动态链接库的扩展名是.so(在Windows上是.dll)。下面是一个简单的例子:
1. 创建一个包含导出函数的Go文件:
```go
package main
import "C"
//export Hello
func Hello() {
println("Hello, world!")
}
func main() {}
```
2. 通过命令"go build -buildmode=c-shared -o mylib.so"来构建共享库
```bash
$ go build -buildmode=c-shared -o mylib.so
```
3. 创建一个C程序来使用这个库:
```c
#include <stdio.h>
#include <dlfcn.h>
int main() {
void *handle = dlopen("./mylib.so", RTLD_LAZY);
if (!handle) {
printf("Failed to load library\n");
return 1;
}
void (*Hello)();
Hello = dlsym(handle, "Hello");
if (!Hello) {
printf("Failed to find function\n");
return 1;
}
Hello();
dlclose(handle);
return 0;
}
```
4. 编译并运行C程序:
```bash
$ gcc -o myprog main.c -ldl
$ ./myprog
```
输出应该是:
```bash
Hello, world!
```
需要注意的是,从Go 1.11开始,需要在导出的函数上添加一个//export注释,以便将其作为C函数导出。
阅读全文