一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Ubuntu下Golang编译生成动态库的方法

时间:2026-06-13 10:36:48 编辑:袖梨 来源:一聚教程网

在Ubuntu下,使用Golang编译生成动态库(.so文件)需要遵循以下步骤:

Ubuntu下Golang编译如何生成动态库

  1. 创建一个新的Go文件,例如hello.go,并编写你的Go代码。在这个例子中,我们将创建一个简单的函数,用于返回一个字符串:
package mainimport "C"//export Hellofunc Hello() string {return "Hello from Go!"}func main() {}

注意,我们使用了//export注释来导出Hello函数,使其可以在C代码中调用。同时,我们导入了C包,这是Go与C语言交互所必需的。

  1. 使用go build命令编译Go代码为动态库。在终端中,导航到包含hello.go文件的目录,然后运行以下命令:
go build -o libhello.so -buildmode=c-shared hello.go

这将生成一个名为libhello.so的动态库文件。

  1. 现在你可以在其他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, "%sn", dlerror());return 1;}hello_func hello = (hello_func)dlsym(handle, "Hello");if (!hello) {fprintf(stderr, "%sn", dlerror());dlclose(handle);return 1;}printf("%sn", hello());dlclose(handle);return 0;}
  1. 编译C程序并链接到动态库。在终端中,导航到包含main.c文件的目录,然后运行以下命令:
gcc -o main main.c -ldl

这将生成一个名为main的可执行文件。

  1. 运行生成的可执行文件:
./main

你应该看到输出Hello from Go!,这表明你已经成功地从Go代码生成了一个动态库,并在C程序中调用了它。

热门栏目