Ubuntu下Golang编译如何生成动态库
导读:在Ubuntu下,使用Golang编译生成动态库(.so文件)需要遵循以下步骤: 创建一个新的Go文件,例如hello.go,并编写你的Go代码。在这个例子中,我们将创建一个简单的函数,用于返回一个字符串: package main...
在Ubuntu下,使用Golang编译生成动态库(.so文件)需要遵循以下步骤:
- 创建一个新的Go文件,例如
hello.go,并编写你的Go代码。在这个例子中,我们将创建一个简单的函数,用于返回一个字符串:
package main
import "C"
//export Hello
func Hello() string {
return "Hello from Go!"
}
func main() {
}
注意,我们使用了//export注释来导出Hello函数,使其可以在C代码中调用。同时,我们导入了C包,这是Go与C语言交互所必需的。
- 使用
go build命令编译Go代码为动态库。在终端中,导航到包含hello.go文件的目录,然后运行以下命令:
go build -o libhello.so -buildmode=c-shared hello.go
这将生成一个名为libhello.so的动态库文件。
- 现在你可以在其他C程序中使用这个动态库。创建一个新的C文件(例如
main.c),并编写以下代码来调用Hello函数:
#include <
stdio.h>
#include <
dlfcn.h>
typedef const char* (*hello_func)();
int main() {
void* handle = dlopen("./libhello.so", RTLD_LAZY);
if (!handle) {
fprintf(stderr, "%s\n", dlerror());
return 1;
}
hello_func hello = (hello_func)dlsym(handle, "Hello");
if (!hello) {
fprintf(stderr, "%s\n", dlerror());
dlclose(handle);
return 1;
}
printf("%s\n", hello());
dlclose(handle);
return 0;
}
- 编译C程序并链接到动态库。在终端中,导航到包含
main.c文件的目录,然后运行以下命令:
gcc -o main main.c -ldl
这将生成一个名为main的可执行文件。
- 运行生成的可执行文件:
./main
你应该看到输出Hello from Go!,这表明你已经成功地从Go代码生成了一个动态库,并在C程序中调用了它。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu下Golang编译如何生成动态库
本文地址: https://pptw.com/jishu/735756.html
