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

hello.go,并编写你的Go代码。在这个例子中,我们将创建一个简单的函数,用于返回一个字符串:package mainimport "C"//export Hellofunc 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的动态库文件。
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;}main.c文件的目录,然后运行以下命令:gcc -o main main.c -ldl这将生成一个名为main的可执行文件。
./main你应该看到输出Hello from Go!,这表明你已经成功地从Go代码生成了一个动态库,并在C程序中调用了它。