Я довольно плохо знаком с более низкоуровневыми языками программирования, поэтому извините, если ответ полностью очевиден.
Для проекта мне нужно импортировать общую библиотеку (sdk.so) и вызвать ее функции. С помощью nm -D /lib/sdk.so --defined-only
я могу просматривать экспортированные функции, поэтому я знаю, что они существуют.
Теперь я хочу вызвать определенные функции, поэтому я загружаю библиотеку:
package main
// #cgo LDFLAGS: -ldl
// #include <stdlib.h>
// #include <dlfcn.h>
import "C"
import (
"errors"
"fmt"
"log"
"unsafe"
)
libName := "sdk"
libName := C.CString(name)
defer C.free(unsafe.Pointer(libName))
handle := C.dlopen(libName, C.RTLD_LAZY)
if handle == nil {
return nil, ErrSoNotFound
}
sym := C.CString("some_function")
defer C.free(unsafe.Pointer(sym))
someFunction := C.dlsym(handle, sym)
if mdpSdkAlloc == nil {
log.Fatal(ErrSoFunctionNotFound)
}
fmt.Println(someFunction)
Но теперь я Я застрял и не знаю, как вызвать функцию. Println печатает что-то вроде 0x7f50a5f9cec0, с амперсандом, и я получаю что-то вроде 0xc0000b2018, а со звездочкой я получаю «недопустимый косвенный атрибут someFunction (типа unsafe.Pointer)». Как я могу привести это к вызову функции?
Спасибо за любую помощь.