通过 go 模块的内存地址从 .so 文件调用 C 函数。 (cgo)

Calling C function from .so file by memory address from go module. (cgo)

我有一个旧的 .so 文件,里面有一个非常复杂的 clang 解析器,我必须从 go 模块调用它。

    ...
    lib := C.dlopen(C.CString("./resources/bin/parser.so"), C.RTLD_LAZY)
    functions_address := C.dlsym(lib, C.CString("parse"))

我已经通过定义 C typedef、创建辅助方法并将“functions_address”传递给通过引用调用其他函数的辅助方法解决了这个问题

typedef char (*parse) (char *file);

char bridge (parse p, char* file) {
        p(file);
}