Go语言中,如何调用C++的dll文件

news/2025/2/12 22:18:48/

我将给出一个完整的示例来说明如何调用C++ DLL文件。首先,我们将创建一个简单的C++ DLL,然后编写Go代码来调用该DLL。

  1. 创建C++ DLL文件(example.cpp):
#include <iostream>extern "C" {__declspec(dllexport) void HelloWorld() {std::cout << "Hello from C++ DLL!" << std::endl;}
}
  1. 编译C++代码为DLL文件:

使用MinGW编译器编译 example.cpp 文件,生成 example.dll 文件。

-Wl,–out-implib,libexample.a -Wl,–output-def,example.def

其中,这段话不是必须的

g++ -shared -o example.dll example.cpp 
g++ -shared -o example.dll example.cpp -Wl,--out-implib,libexample.a -Wl,--output-def,example.def
  1. .def 文件生成 .h 头文件:
pexports example.dll > example.def

这将生成 example.def 文件。您可以手动将函数声明复制到一个新的头文件 example.h 中。
只要方法名HelloWorld是正确的,第三步的pexports就不是必须的

// example.h
#ifndef EXAMPLE_H
#define EXAMPLE_H#ifdef __cplusplus
extern "C" {
#endifvoid HelloWorld();#ifdef __cplusplus
}
#endif#endif // EXAMPLE_H
  1. 编写Go代码调用DLL文件:

创建一个名为 main.go 的Go文件。

package main// #include "example.h"
// #cgo LDFLAGS: -L. -lexample
import "C"func main() {// 调用C++ DLL中的函数C.HelloWorld()
}
  1. 编译Go代码:

在命令行中执行以下命令,将Go代码编译成可执行文件。

go build -o main main.go
  1. 运行生成的可执行文件:
./main

运行后,应该会看到输出 “Hello from C++ DLL!”。

这就完成了使用Go调用C++ DLL的整个过程。


http://www.ppmy.cn/news/1378321.html

相关文章

为什么main方法在Java中代表主线程?

main 方法在 Java 等编程语言中确实代表着程序的入口点&#xff0c;也就是程序开始执行的地方。当我们启动一个 Java 应用程序时&#xff0c;JVM&#xff08;Java 虚拟机&#xff09;会首先查找 main 方法&#xff0c;并从那里开始执行程序。 关于为什么 main 方法代表主线程&a…

c++之迭代器与反向迭代器

&#xff09; 正向迭代器迭代器的变量与typedef与模版operator()operator--()operator*()operator->() 反向迭代器模版与typedef与变量operator()operator--()operator*()operator->() 正向迭代器 以链表的迭代器为例 具体的代码以及可以看上一篇链表的文章:链表 迭代器的…

02 数据结构之链表

阅读引言&#xff1a; 本文只提供关于我在复习过程中实现的关于链表的代码 /* link_list.h */ #ifndef _LINK_LIST_H_ #define _LINK_LIST_H_/***********************************************Author: Hewei*Date: 2024-3-3*Brife: link list some operator method***arithmet…

Python错题集-8:AttributeError(找不到对应的对象的属性)

1问题描述 AttributeError: AxesSubplot object has no attribute arc 2代码详情 import matplotlib.pyplot as plt# 创建一个新的图形和坐标轴 fig, ax plt.subplots()# 定义弧线的参数 center (0.5, 0.5) # 圆心坐标 (x, y) width 1.0 # 半径 height 0.5 # 半径 ang…

IDEA编译安卓源码TVBox

因为电视x受限&#xff0c;无法观看电视直播&#xff0c;为了春晚不受影响&#xff0c;于是网络一顿搜索&#xff0c;试过多个APP&#xff0c;偶尔找到这款开源的TVBox&#xff0c;寒假在家&#xff0c;随便拿来练练手&#xff0c;学习安卓APP的编写&#xff0c;此文做以记录&a…

C#学习:初识各类应用程序

编写我们第一个程序——Hello,World! 1.编程不是“学”出来的&#xff0c;而是“练”出来的 2.在反复应用中积累&#xff0c;忽然有一天就会顿悟 3.学习原则&#xff1a; 3.1从感官到原理 3.2从使用别人的到创建自己的 3.3必需亲自动手 3.4必需学以致用&#xff0c;紧跟实际…

Linux--编译链接的过程

一.gcc,g,gdb安装 命令行写gcc,g,gdb根据提示安装: sudo apt install gcc/g/gdb 二.gcc分布编译链接 编译链接的过程&#xff1a;(面试过程一个大的问题&#xff09; (1)预编译: gcc -E main.c -o main.i 用gcc预编译main.c输出main.i(2)编译: gcc -S main.i -o main.s(3)汇编…

Oracle Linux 8.9 安装 Python 3.11.8 和 Miniconda

Oracle Linux 8.9 安装 Python 3.11.8 和 Miniconda 1. 安装 Python 3.11.82. 安装 Miniconda 1. 安装 Python 3.11.8 Update system, sudo dnf update -yInstall Library, sudo dnf install curl gcc openssl-devel bzip2-devel libffi-devel zlib-devel wget make git -yI…