返回顶部
首页 > 资讯 > 后端开发 > GO >Golang 编译成DLL文件的操作
  • 917
分享到

Golang 编译成DLL文件的操作

2024-04-02 19:04:59 917人浏览 泡泡鱼
摘要

首先撰写golang程序exportGo.go: package main import "C" import "fmt" //export PrintBye func

首先撰写golang程序exportGo.go:


package main
import "C"
import "fmt"
 
//export PrintBye
 
func PrintBye() {
    fmt.Println("From DLL: Bye!")
}
//export Sum
 
func Sum(a int, b int) int {    
return a + b;
}
func main() {    
// Need a main function to make CGO compile package as C shared library
}
   

编译成 DLL 文件:


go build -buildmode=c-shared -o exportgo.dll exportgo.go

编译后得到 exportgo.dll 和 exportgo.h两个文件。

补充:Go1.10在编译成dll小实例

看代码吧~


package main
import (
    "net"
)
//必须导入
import "C"
//编译成动态库也是必须的
func main() {}
//export Interfaces
func Interfaces(list []string, retlen *int) string {
    interf, err := net.InterfaceAddrs()
    if err != nil {
        return err.Error()
    }
    for i, v := range interf {
        if i >= len(list) {
            break
        }
        list[i] = v.String()
    }
    *retlen = len(list)
    return ""
}

编译命令:


go build -ldflags "-s -w" -buildmode=c-shared -o net.dll main.go

在当前文件夹会生成两个文件net.dll net.h

下面是使用:


#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#include "net.h"
int main()
{ 
    GoString ret;
    GoSlice slice;
    slice.len=10;
    slice.cap=0;
    slice.data=calloc(10,sizeof(GoString));
    GoInt retlen=0;
    ret=Interfaces(slice,&retlen);
    if (ret.n != 0)
    {
        char* retc = calloc(ret.n+1,sizeof(char));
        memcpy(retc,ret.p,ret.n);
        printf("Return value:%s\n", retc); 
        free(retc);
        retc=NULL;
    }
    GoString* st=(GoString*)(slice.data);
    for (int i=0;i<retlen;i++)
    {
        printf("%s\n", st[i].p);
    }
    free(slice.data);
    slice.data=NULL;
    return 0;
}

尽量不要用返回值来在C中处理,因为Go code不能在C分配的内存中存储指向Go分配的内存的指针,这个很重要,不然你就会在使用过程中各种崩溃。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。如有错误或未考虑完全的地方,望不吝赐教。

您可能感兴趣的文档:

--结束END--

本文标题: Golang 编译成DLL文件的操作

本文链接: https://lsjlt.com/news/125172.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Golang 编译成DLL文件的操作
    首先撰写golang程序exportgo.go: package main import "C" import "fmt" //export PrintBye func ...
    99+
    2024-04-02
  • python3编译成pyc文件
    pyc是编译py之后生成的本地文件。一般当我们想发布系统的时候不想让别人看到源代码,所以要提前生成pyc文件。 现今网上有很多介绍如何生成pyc的文章,但是在python3之后发现其生产pycache目录下,而不是与源文件同一目...
    99+
    2023-01-31
    编译成 文件 pyc
  • Windows操作系统的DLL文件工作原理
    什么是.dll文件? .dll文件指的是动态链接库(Dynamic Link Library)文件。这些文件包含可被程序在运行时调用的代码和数据。它们是Windows操作系统中重要的组成部分,允许程序共享资源,提高效率并...
    99+
    2023-11-21
    Windows DLL 文件
  • linux中把.c的文件编译成.so文件
    linux中共享库以so为后缀(shared object),与Windows下的DLL类似,是在程序运行时动态连接。多个进程可以连接同一个共享库。 以下以编译mylib.c为例讲如何编译.so文件。 首先,编译myli...
    99+
    2022-06-04
    linux .c 文件编译成.so linux 编译c so
  • 修改并编译golang源码的操作步骤
    最近为了做Hyperledger Fabric国密改造,涉及到了golang源码的改动。特将操作过程整理如下,以供参考: golang的源码安装其实比较简单,只需运行源码包中的脚本...
    99+
    2024-04-02
  • golang 编译之后的可执行文件能被反编译吗?
    是的,go 编译后的可执行文件可以被反编译。反编译工具会分析其内部结构,提取代码信息,并转换为 go 代码。可用工具包括 gopherlua、godefy 和 golang-obf。不过...
    99+
    2024-04-21
    git golang
  • java如何编译成class文件
    Java代码可以使用Java编译器(javac命令)来编译成字节码文件(.class文件)。以下是使用javac命令编译Java代码...
    99+
    2023-08-26
    java class
  • idea:jar包反编译成java文件
    步骤: 根据安装的idea找到如下路径 将所需的jar包放到同目录下,并创建与jar包名称相同的空文件夹  在java-decompiler.jar包中在导航栏输入cmd进入命令提示符中 4。在命令提示符中输入如下代码:         ...
    99+
    2023-09-01
    jar intellij-idea java
  • 将python生成的exe文件反编译成py文件的方法
    前言 闲来无事,就喜欢瞎折腾,之前用python打包过exe小工具,然后今天就突然想到,既然能打包,那就肯定能反编译成py文件,为了这个想法,就网上查资料,自己操作了一下,过程参考了文章: https://www.cnblogs.com/s...
    99+
    2023-09-13
    pycharm ide python
  • 如何将class文件反编译成java文件
    这篇文章给大家分享的是有关如何将class文件反编译成java文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对...
    99+
    2023-06-14
  • 怎么将class文件反编译成java文件
    要将class文件反编译成java文件,你可以使用Java反编译工具,如JD-GUI、Jad等。下面是使用JD-GUI工具的步骤:1...
    99+
    2023-08-25
    java
  • golang怎么操作csv文件
    本文小编为大家详细介绍“golang怎么操作csv文件”,内容详细,步骤清晰,细节处理妥当,希望这篇“golang怎么操作csv文件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。练习要求:写一个小程序解析data...
    99+
    2023-06-29
  • golang中怎么操作文件
    在Go语言中,读取和修改文件是非常常见的需求。在本文中,我们将介绍如何操作文件,包括打开文件、删除文件内容、获取文件信息和将文件恢复到原始状态等。一、打开文件使用os.OpenFile()函数来打开文件,该函数可以接受许多参数。在本例中,我...
    99+
    2023-05-14
    Golang go语言
  • golang中如何操作文件
    本篇内容介绍了“golang中如何操作文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在Go语言中,读取和修改文件是非常常见的需求。在本文...
    99+
    2023-07-05
  • Android Studio 编译C/C++生成.so文件
    前期准备:下载NDK、CMake 方法一:使用AndroidStudio自动创建Native C/C++ 项目 创建新项目 创建项目后,会默认...
    99+
    2023-09-18
    android studio android ide Powered by 金山文档
  • python怎么编译成可执行文件
    在Python中,可以使用pyinstaller库将Python代码编译成可执行文件,以下是使用pyinstaller的步骤:1. ...
    99+
    2023-08-18
    python
  • 如何对Python编译PyInstaller打包生成的exe文件进行反编译生成pyc、py源代码文件
    目录准备工作根据exe生成pyc文件根据pyc文件反编译为py文件参考总结准备工作 没有加壳的python编译并打包的exe文件python反打包代码(不知道这样叫是否合理):pyt...
    99+
    2023-01-18
    exe可以反编译成源码 exe程序反编译教程 如何反编译pyc文件
  • 如何操作win7缺失dll文件的一键修复
    计算机是我们经常使用的工具之一。许多用户会定期清理电脑上的垃圾。这是一个好习惯,但在操作过程中,一些小型合作伙伴不小心删除了一些文件。今天,小编将向你介绍一种一键修复win7缺失的dll文件的方法。让我们看看!如何操作win7缺乏dll文件...
    99+
    2023-07-15
  • Clion-MinGW编译后的exe文件添加ico图标的操作方法
    目录编译前准备1.编译ico.rc>ico.o2.编译为执行文件exe手动编译Clion编译效果详细信息乱码解决修改exe图标无效编译前准备 我们正常直接编译后生成的exe是没...
    99+
    2024-04-02
  • Golang 文件操作:删除指定的文件方式
    我就废话不多说了,大家还是直接看代码吧~ package main import "os" func main () { err := os.Remove(logF...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作