首页主机资讯Ubuntu下Golang编译如何生成动态库

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

时间2025-10-27 15:12:03发布访客分类主机资讯浏览1008
导读:在Ubuntu下,使用Golang编译生成动态库(.so文件)需要遵循以下步骤: 创建一个新的Go文件,例如hello.go,并编写你的Go代码。在这个例子中,我们将创建一个简单的函数,用于返回一个字符串: package main...

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

  1. 创建一个新的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语言交互所必需的。

  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, "%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;

}
    
  1. 编译C程序并链接到动态库。在终端中,导航到包含main.c文件的目录,然后运行以下命令:
gcc -o main main.c -ldl

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

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

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

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu下Golang编译如何生成动态库
本文地址: https://pptw.com/jishu/735756.html
Java项目在Ubuntu上如何编译 Ubuntu Java编译如何提高稳定性

游客 回复需填写必要信息