zoukankan      html  css  js  c++  java
  • go创建动态库

    • *nix
      *nix创建so比较方便,写好go代码之后,直接一条命令搞定。
    go build -buildmode=c-shared -o libgobblob.so
    

    命令执行之后,会生成libgobblob.h和 libgobblob.so

    • windows

    windows需要安装gcc编译器,我用的的MinGW包,解压,把bin目录加入环境变量。

    然后执行命令之后发现会报错,windows下go不支持生成动态库。

    >>go build -buildmode=c-shared -o libgobblob.dll
    -buildmode=c-shared not supported on windows/amd64
    

    这一步折腾了好久,最终在stackoverflow找到了解决方法。[[ https://stackoverflow.com/questions/40573401/building-a-dll-with-go-1-7 | building-a-dll-with-go]]

    • 编译静态库
    go build -buildmode=c-archive -o libgobblob.a
    
    • gobblob.c文件,然后把go代码中要导出的函数,在gobblob.c中全部调用一遍。
    #include <stdio.h>
    #include "libgobblob.h"
    
    // force gcc to link in go runtime (may be a better solution than this)
    void dummy() {
       // 所有在go中要导出的代码都在这里调用一次,参数随便写,只要能编译ok即可
        gobblob_init(NULL,NULL,NULL);
        gobblob_deinit(NULL);
        gobblob(NULL,NULL,NULL,NULL,NULL,NULL);
    }
    
    int main() {
    
    }
    
    • 执行如下命令,生成dll
    gcc -shared -pthread -o libgobblob.dll gobblob.c libgobblob.a -lWinMM -lntdll -lWS2_32 -Iinclude
    
  • 相关阅读:
    Activator.CreateInstance 反射实例化对象
    MVC Form提交
    Redis 下载
    List<T> 序列化与反序列化
    快速反射DataTable
    数据库特性
    javascript判断文件大小
    MD5
    HttpHelper
    cacheHelper
  • 原文地址:https://www.cnblogs.com/fitness/p/8004494.html
Copyright © 2011-2022 走看看