From: jaehoon.hyun Date: Thu, 28 Mar 2019 07:58:13 +0000 (+0900) Subject: dynamic lib function call using cgo X-Git-Tag: submit/tizen/20190409.085658~11^2~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a46183fe79b07f4951577c12d88945b653197b9c;p=platform%2Fcore%2Fsystem%2Fedge-orchestration.git dynamic lib function call using cgo --- diff --git a/src/scoringmgr/mock/mock_lib_add.go b/src/scoringmgr/mock/mock_lib_add.go new file mode 100644 index 0000000..4bebea3 --- /dev/null +++ b/src/scoringmgr/mock/mock_lib_add.go @@ -0,0 +1,47 @@ +package mockscoringmgr + +/* +#include +#include +#cgo LDFLAGS: -ldl + +int +wrap_add(void *f, int a, int b){ + return ((int (*)(int a, int b))f)(a,b); +} +*/ +import "C" +import "unsafe" + +import ( + "time" + scoringmgr "scoringmgr" +) + +func LoadScoringAdd(libPath string, intervalMs int) { + + sym := C.CString("add") + defer C.free(unsafe.Pointer(sym)) + + lib := C.CString(libPath) + defer C.free(unsafe.Pointer(lib)) + + handle, err := C.dlopen(lib , C.RTLD_LAZY) + defer C.dlclose(handle) + + if err != nil { + scoringmgr.ELog.Fatal("dlopen error occured") + } + + symbolPtr, symbolErr := C.dlsym(handle, sym) + if symbolErr != nil { + scoringmgr.ELog.Fatal("symbol error occured") + } + + for { + scoringmgr.ILog.Println(C.wrap_add(symbolPtr,2,3)) + time.Sleep(time.Duration(intervalMs) * time.Millisecond) + } + + return +}