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.cppcal.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的创建与调用实例相关推荐

  1. Qt DLL总结-创建及调用QT的 DLL

    目录 Qt DLL总结[一]-链接库预备知识 Qt DLL总结[二]-创建及调用QT的 DLL Qt DLL总结[三]-VS2008+Qt 使用QPluginLoader访问DLL 开发环境:VS20 ...

  2. c 编译易语言dll文件,易语言调用DLL的问题(付dll文件,VC++编译的)

    AA直译器v1.02.rar (795.15 KB, 下载次数: 143) 2012-11-27 17:23 上传 点击文件名下载附件 dll说明: CE自动汇编直译器: AA引擎 各语言通用DLL ...

  3. MFC创建、调用Dll的方法

    1. MFC创建DLL 1. 打开VS,新建项目,选择"MFC动态链接库",点击"下一步". 2. 设置项目名,路径等参数,点击"创建". ...

  4. windos下编译ffmpeg生成dll、lib库(开启265)

    编译环境Win 64位+MSYS2 一.安装MSYS2 1.下载msys.exe,https://www.msys2.org/ 2.安装msys 3.运行msys并执行命令pacman -Syu,一律 ...

  5. windows下mingw32 编译 libusb[实测可行]

    之前项目需要libusb开发QT下的USB硬件相关的应用程序,一直没有整理文档,今天重走一遍,并把文档整理出来. 一.材料准备 1.windows7 x64 2.mingw32 作用:使用gcc,g+ ...

  6. 【转】Android 4.3源码的下载和编译环境的安装及编译

    原文网址:http://jingyan.baidu.com/article/c85b7a641200e0003bac95a3.html  告诉windows用户一个不好的消息,windows环境下没法 ...

  7. c#:Reflector+Reflexil 修改编译后的dll/exe文件

    原文:c#:Reflector+Reflexil 修改编译后的dll/exe文件 不知道大家有没有这样的经历:现场实施时测试出一个bug,明明知道某个dll/exe文件只要修改一二行代码即可,但手头没 ...

  8. 【Android开发】构建Android源码编译环境

    原文:http://android.eoe.cn/topic/android_sdk 构建Android源码编译环境 123456789 10 11 12 13 14 15 16 17 18 $ su ...

  9. 虚拟打印机开发日志(一):使用x64 WIN7编译环境编译的完整步骤

    使用MS提供的MSPLOT驱动源文件,可方便地进行自用的打印机驱动开发或虚拟打印机驱动的开发,以下是一个最简的完整的使用DDK编译MSPLOT打印驱动的步骤: 1.编译对应的工具(64bit驱动) 打 ...

  10. 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 ...

最新文章

  1. matlab中find函数的使用说明
  2. 如何画出漂亮的神经网络图?神经网络可视化工具集锦搜集
  3. linux 内核编译错误 .size expression for copy_user_generic_c does not evaluate to a constant
  4. SimpleAdapter真不简单!
  5. 电脑显示器变色_两千元档超强电竞小金刚:180hz的泰坦军团T27QR显示器
  6. List、Array与ArrayList
  7. R语言绘制ROC曲线如何画在一个图中
  8. 1. 两数之和(Java)
  9. rest_framework10:base64补充/修改头像
  10. 争分夺秒!一大批高校正在加紧扩建......
  11. Vue检测当前是否处于mock模式
  12. .Net读取rss的两种方法
  13. 站在悬崖边上,金立手机的生死较量
  14. Python实现Windows电脑定时关机
  15. 北京筑龙出席安徽省《电子招标投标办法》修订意见研讨会并发言
  16. 组装台式计算机的部件,台式电脑组装三大件讲解挑选指南
  17. 【Microsoft Office】免密破解Microsoft Word文档(.docx)的文档保护
  18. java 将多个文件打包成压缩包下载
  19. 微信wifi服务器地址,微信连WIFI服务器时钟不同步
  20. 手机qq如何绑定qq邮箱服务器,如何配置和绑定QQ个人邮箱

热门文章

  1. 求大佬发一个unity curvy的资源包啊
  2. 推荐几款大家常使用的 SSH 客户端工具
  3. bp神经网络的主要功能,BP神经网络的实现包括
  4. JSESSIONID 作用
  5. eclipse安装Subclipse(svn数据源)
  6. 基于Unity的极乐净土/others MMD动画制作
  7. cacti 文件服务器,免费的服务器和网络监控工具-CactiEZ
  8. 生命游戏(康威的生命游戏) Game Of Life - Conway Cocos Creator 3.x版实现
  9. 康威生命游戏-蓝桥杯java
  10. oppo9s刷机教程_OPPOR9S海外版官方固件刷机教程_线刷|救砖教程图解