我使用 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 ×1