dynamic lib function call using cgo
authorjaehoon.hyun <jaehoon.hyun@samsung.com>
Thu, 28 Mar 2019 07:58:13 +0000 (16:58 +0900)
committerjaehoon.hyun <jaehoon.hyun@samsung.com>
Thu, 28 Mar 2019 07:58:13 +0000 (16:58 +0900)
src/scoringmgr/mock/mock_lib_add.go [new file with mode: 0644]

diff --git a/src/scoringmgr/mock/mock_lib_add.go b/src/scoringmgr/mock/mock_lib_add.go
new file mode 100644 (file)
index 0000000..4bebea3
--- /dev/null
@@ -0,0 +1,47 @@
+package mockscoringmgr
+
+/*
+#include <stdlib.h>
+#include <dlfcn.h>
+#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 
+}