From a46183fe79b07f4951577c12d88945b653197b9c Mon Sep 17 00:00:00 2001 From: "jaehoon.hyun" Date: Thu, 28 Mar 2019 16:58:13 +0900 Subject: [PATCH] dynamic lib function call using cgo --- src/scoringmgr/mock/mock_lib_add.go | 47 +++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 src/scoringmgr/mock/mock_lib_add.go 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 +} -- 2.34.1