zoukankan      html  css  js  c++  java
  • golang调用动态库

    测试动态库

    test_so.h

    int test_so_func(int a,int b);

    test_so.c

    #include "test_so.h"
    
    int test_so_func(int a,int b)
    {
        return a*b;
    }

    生成so

    gcc -shared ./test_so.c -o test_so.so

    复制so文件到golang项目目录

    golang项目目录,建立

    load_so.h

    int do_test_so_func(int a,int b);

    load_so.c

    #include "load_so.h"
    #include <dlfcn.h>
    
    int do_test_so_func(int a,int b)
    {
        void* handle;
        typedef int (*FPTR)(int,int);
    
        handle = dlopen("./test_so.so", 1);
        FPTR fptr = (FPTR)dlsym(handle, "test_so_func");
    
        int result = (*fptr)(a,b);
        return result;
    }

    test.go

    package main
    
    /*
    #include "load_so.h"
    #cgo LDFLAGS: -ldl
    */
    import "C"
    import "fmt"
    
    func main() {
        fmt.Println("20*30=", C.do_test_so_func(20, 30))
    }

    编译运行即可。

    注:某大神在用go调用c的时候,掉到了某坑里,地址http://www.newjueqi.com/?p=106,结论为

    1./* */注释的代码下一行一定是import "C",中间不能有空行
    2.import "C"必须单独一行,不能和其它库一起导入

  • 相关阅读:
    python 时间 时间戳 转换
    jsp mysql
    multi struts config
    mysql start
    struts logic tag
    jsp setProperty
    jstl fn tag
    write jsp tag
    use Bean in JSP
    jsp mysql JavaBean
  • 原文地址:https://www.cnblogs.com/ziyouchutuwenwu/p/3657285.html
Copyright © 2011-2022 走看看