通过go模块的内存地址从.so文件调用C函数.(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、创建一个helper方法并传递"函数_地址";通过引用调用另一个函数的辅助方法

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

最新更新