小编shr*_*net的帖子

如何在go中使用golang c共享库

我使用 go 编写了 c 共享库。

package main

import "C"
import "log"

//export RunLib
func RunLib() {
    log.Println("Call RunLib")
}

func init() {
    log.Println("Call init")
}

func main() {
    log.Println("Call main")
}
Run Code Online (Sandbox Code Playgroud)

我使用以下命令创建了库: go build -buildmode=c-shared -o lib.so lib.go

为了使用这个库,我编写了这段 golang 代码。

package main

/*
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>

static void callFromLib() {
    void (*fn)();
    void *h = dlopen("lib.so", RTLD_LAZY);
    if (!h) {
        fprintf(stderr, "Error: %s\n", dlerror());
        return;
    }

    *(void**)(&fn) = dlsym(h, "RunLib");
    if (!fn) {
        fprintf(stderr, "Error: %s\n", …
Run Code Online (Sandbox Code Playgroud)

go

5
推荐指数
2
解决办法
8165
查看次数

标签 统计

go ×1