【c++随笔】MinGW32编译环境实现DLL的创建与调用实例
g++实现DLL的打包和引用
实现cpp代码的打包
- 编写接口函数 cal.cpp
#define BUILD_CAL_DLL // 定义xxx.dll构建 #include "cal.h" // 引用xxx.h头文件/*接口函数*/ int addInt(int a, int b){return a + b; }int subInt(int a, int b){return a - b; }
- 编写头文件 cal.h
#ifdef BUILD_CAL_DLL // 如果定义了构建,表示生成xxx.dll#define EXPORT __declspec(dllexport) #else // 否则表示引用xxx.dll#define EXPORT __declspec(dllimport) #endif/*接口*/ extern "C"{EXPORT int addInt(int, int);EXPORT int subInt(int, int); }
- 编译生成xxx.dll
g++ -shared -Wl,--kill-at,--output-def,cal.def,--out-implib,cal.a -o cal.dll cal.cpp
静态引用方式 >> #pragma comment(lib, “cal.a”),尚不会使用,cal.a, cal.ref 的使用方法请自行分析
实现dll文件的两种引用
声明: 此处默认main.cpp与cal.dll在同一目录下
- 隐式链接(常用)
/*main.cpp*/ #include <iostream> #include "cal.h" using namespace std;int main(int argc, char const *argv[]) {/* code */cout << addInt(5, 6) << endl;cout << subInt(9, 4) << endl;return 0; }
编译: g++ cal.dll main.cpp -o main
- 显式链接
/*main.cpp*/ #include <iostream> #include <windows.h> using namespace std;int main(int argc, char const *argv[]) {/* code */// windows.h 中的加载器HINSTANCE Hdll;Hdll = LoadLibrary("cal.dll");if(!Hdll){FreeLibrary(Hdll);cout << "Error!" << endl;return 0;}// 定义函数变量typedef int(*ADDINT)(int a, int b);typedef int(*SUBINT)(int a, int b);ADDINT addInt = (ADDINT)GetProcAddress(Hdll,"addInt");SUBINT subInt = (SUBINT)GetProcAddress(Hdll,"subInt");cout << addInt(5, 6) << endl;cout << subInt(9, 4) << endl;FreeLibrary(Hdll);return 0; }
编译: g++ main.cpp -o main
- 注:这样生成dll文件的可能缺陷:
不同的编译环境下32位和64位兼容性问题
【c++随笔】MinGW32编译环境实现DLL的创建与调用实例相关推荐
- Qt DLL总结-创建及调用QT的 DLL
目录 Qt DLL总结[一]-链接库预备知识 Qt DLL总结[二]-创建及调用QT的 DLL Qt DLL总结[三]-VS2008+Qt 使用QPluginLoader访问DLL 开发环境:VS20 ...
- c 编译易语言dll文件,易语言调用DLL的问题(付dll文件,VC++编译的)
AA直译器v1.02.rar (795.15 KB, 下载次数: 143) 2012-11-27 17:23 上传 点击文件名下载附件 dll说明: CE自动汇编直译器: AA引擎 各语言通用DLL ...
- MFC创建、调用Dll的方法
1. MFC创建DLL 1. 打开VS,新建项目,选择"MFC动态链接库",点击"下一步". 2. 设置项目名,路径等参数,点击"创建". ...
- windos下编译ffmpeg生成dll、lib库(开启265)
编译环境Win 64位+MSYS2 一.安装MSYS2 1.下载msys.exe,https://www.msys2.org/ 2.安装msys 3.运行msys并执行命令pacman -Syu,一律 ...
- windows下mingw32 编译 libusb[实测可行]
之前项目需要libusb开发QT下的USB硬件相关的应用程序,一直没有整理文档,今天重走一遍,并把文档整理出来. 一.材料准备 1.windows7 x64 2.mingw32 作用:使用gcc,g+ ...
- 【转】Android 4.3源码的下载和编译环境的安装及编译
原文网址:http://jingyan.baidu.com/article/c85b7a641200e0003bac95a3.html 告诉windows用户一个不好的消息,windows环境下没法 ...
- c#:Reflector+Reflexil 修改编译后的dll/exe文件
原文:c#:Reflector+Reflexil 修改编译后的dll/exe文件 不知道大家有没有这样的经历:现场实施时测试出一个bug,明明知道某个dll/exe文件只要修改一二行代码即可,但手头没 ...
- 【Android开发】构建Android源码编译环境
原文:http://android.eoe.cn/topic/android_sdk 构建Android源码编译环境 123456789 10 11 12 13 14 15 16 17 18 $ su ...
- 虚拟打印机开发日志(一):使用x64 WIN7编译环境编译的完整步骤
使用MS提供的MSPLOT驱动源文件,可方便地进行自用的打印机驱动开发或虚拟打印机驱动的开发,以下是一个最简的完整的使用DDK编译MSPLOT打印驱动的步骤: 1.编译对应的工具(64bit驱动) 打 ...
- linux+4.4+android,Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法
Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法跟Ubuntu 12.04 - 13.10 以及jellybean编译环境配置没多大区别, 顺便记录下而已: 64 ...
最新文章
- matlab中find函数的使用说明
- 如何画出漂亮的神经网络图?神经网络可视化工具集锦搜集
- linux 内核编译错误 .size expression for copy_user_generic_c does not evaluate to a constant
- SimpleAdapter真不简单!
- 电脑显示器变色_两千元档超强电竞小金刚:180hz的泰坦军团T27QR显示器
- List、Array与ArrayList
- R语言绘制ROC曲线如何画在一个图中
- 1. 两数之和(Java)
- rest_framework10:base64补充/修改头像
- 争分夺秒!一大批高校正在加紧扩建......
- Vue检测当前是否处于mock模式
- .Net读取rss的两种方法
- 站在悬崖边上,金立手机的生死较量
- Python实现Windows电脑定时关机
- 北京筑龙出席安徽省《电子招标投标办法》修订意见研讨会并发言
- 组装台式计算机的部件,台式电脑组装三大件讲解挑选指南
- 【Microsoft Office】免密破解Microsoft Word文档(.docx)的文档保护
- java 将多个文件打包成压缩包下载
- 微信wifi服务器地址,微信连WIFI服务器时钟不同步
- 手机qq如何绑定qq邮箱服务器,如何配置和绑定QQ个人邮箱
热门文章
- 求大佬发一个unity curvy的资源包啊
- 推荐几款大家常使用的 SSH 客户端工具
- bp神经网络的主要功能,BP神经网络的实现包括
- JSESSIONID 作用
- eclipse安装Subclipse(svn数据源)
- 基于Unity的极乐净土/others MMD动画制作
- cacti 文件服务器,免费的服务器和网络监控工具-CactiEZ
- 生命游戏(康威的生命游戏) Game Of Life - Conway Cocos Creator 3.x版实现
- 康威生命游戏-蓝桥杯java
- oppo9s刷机教程_OPPOR9S海外版官方固件刷机教程_线刷|救砖教程图解