文章目录

  • 一、.dll生成导入库.a或者.lib
  • 二、静态lib库转dll库

一、.dll生成导入库.a或者.lib

在使用Mingw进行开发时,有时依赖的库只有.dll文件,而Mingw需要的是.a文件,这时就需要通过.dll文件生成一个.a文件。

以libmysql.dll为例,说明如何生成libmysql.a:

gendef libmysql.dll
dlltool -d libmysql.def -D libmysql.dll -l libmysql.a -k

第一条命令会生成一个libmysql.def文件供第二条命令使用。
第二条命令使用前面生成的def文件以及dll文件生成.a文件并把导出名称中的@N去掉。
dlltool也可以替换成llvm-dlltool,但是需要指定目标机器

llvm-dlltool -m i386:x86-64 -d libmysql.def -D libmysql.dll -l libmysql.a -k

如果要生成.lib改一下扩展名即可。

其实目前Mingw GCC是可以直接使用MSVC生成的导入库lib的,只需要改一名扩展名为.a,并在前面加上lib前缀即可,比如有一个MSVC的导入库为abc.lib,改为libabc.a即可。

二、静态lib库转dll库

有时我们编译的是静态库lib,但是希望从这个lib生成对应的dll。
首先需要在控制台运行一下VS安装目录中的vcvars32.bat(以VS2015为例,路径:C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin)以初始话编译环境,然后用类似于下面的命令:

link /out:xxxx.dll /implib:importxx.lib /dll /nologo /machine:YYY libstaticxx.lib /subsystem:console /def:xxxx.def

其中:
libstaticxx…lib是一个静态库
xxxx.dll 链接后产生的DLL
importxx.lib 生成导入库importxx.lib
YYY 是目标机器,可为x86或者x64
xxx.def 是导出符号文件,如果只有一个静态库lib,可以尝试:

dlltool -z xxx.def xxx.lib --export-all-symbols

如果直接在cmd下,没有调用vcvars32.bat脚本,则需要使用/nodedefault:xxx.lib,将dll依赖的系统lib文件添加到命令行中,这样比较麻烦,所以建议还是先运行vcvars32.bat脚本。

.dll、.lib、.a的转换相关推荐

  1. windows 调用linux .a lib,动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a)...

    动态链接库及静态链接库(windows下的.dll .lib和linux下的.so .a) 库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀.例如:libhello.so libhello ...

  2. ffmpeg编译(生成Windows或Win32平台dll, lib)

    ffmpeg编译(生成Windows或Win32平台dll, lib) 介绍:本文简要介绍通过cygwin环境来编译生成ffmpeg. 包括解码组件libfaad与libopencore-amrnb的 ...

  3. 备忘: VC++ 自动适用编译两种模式库文件 (DLL, LIB)

    为什么80%的码农都做不了架构师?>>>    一个好的程序设计规划总会有属于自己的基础代码库.重用这些代码库,DLL或LIB方式最好的选择之一.在写新的项目或程序是,我们不可能每次 ...

  4. vs dll lib 使用记录

    今天把学习opengl的项目从一个电脑copy到另一个电脑时候,发生了glu.dll找不到,导致项目起不来的问题.后来网上查找发现, 虽然我使用了静态连接 mt/mtd 编译, 但是有可能lib中并没 ...

  5. .h .dll .lib

    .h为对一个函数的声明引用,include就是声明某个文件里的函数(内只有声明函数被引用了),编译时使用 .lib为链接时用的,存放的是对于DLL里函数的位置信息等,这样不必把所有dll里函数都加载到 ...

  6. vs2019 编译生成dll,lib,并做调用

    一.前言 本文实验在VS2019将C++源码封装为dll.lib ,并做调用 二.欲封装代码 封装代码头文件和cpp文件如下: //util.h #ifndef _Util_H_ #define _U ...

  7. codeblocks 调用dll/lib

    1.新建工程,参考网上一堆教程 2.在工程中添加文件: 文件包括当前项目主要文件,和库的头文件 3.设置编译选项 1)添加库文件,静态库添加.lib文件,动态库添加dll文件 说明:dll库文件最好放 ...

  8. 破解Foxit PDF SDK(DLL) 3.1, PDF转换到图片, 去除水印

    将PDF转换到图片, 使用Foxit PDF Foxit PDF SDK(DLL) 3.1最新版本发布了, 使用它的免费版本Render PDF页面到图像的话,会有一个水印. 摸了几个小时,终于将这个 ...

  9. dumpbin发现没有入口函数_Dumpbin查看的dll/lib导出函数,不能重定向到文件问题

    Dumpbin.exe 是vs官方自动的查看dll.lib导出函数的利器. 找到dumpbin.exe 下面是我电脑中的位置: 不同平台下的dumpbin 需要同目录下 link.exe文件才能运行. ...

  10. window下查看dll, lib文件是32位还是64位

    工具:dumpbin.exe 依赖:link.exe, mspdb100.dll 命令: dumpbin  /headers  E:\math.dll 结果: Dump of file E:\math ...

最新文章

  1. php和python和java-Java、Python与PHP的虚拟机异同
  2. http staus汇总
  3. SPOJ - LCS Longest Common Substring(后缀自动机)
  4. HttpServletRequest简述
  5. Openstack面试题和知识点总结
  6. ArcSDE数据库连接(直连、服务连)与GT_Geometry存储配置图解
  7. 亚马逊最大无人售货超市开张,云端结账随拿随走
  8. VMware产品互操作性列表
  9. 编译安装nginx-1.6.0
  10. Mysql主备延迟的来源
  11. 用wxDraw.js制作酷炫的小程序canvas动画『wxDraw 小程序界的zrender』
  12. Redis 在Golang中使用遇到的坑
  13. 计算机上的证书安装不了,win10系统数字证书安装不上的详细教程
  14. java毕业设计题目大全
  15. java udp 断开_java – 如何中断阻塞调用UDP socket的receive()[复制]
  16. Linux架设DNS服务器(ChinaITLab.com 搜集整理)
  17. TRIZ创新方法#学习笔记02# |功能分析、技术矛盾和物理矛盾
  18. 【ENOVIA】MBOM经理概述 | 达索系统百世慧®
  19. PMP第十一节:项目风险管理
  20. 【思科模拟器实验】交换机端口聚合

热门文章

  1. 如何搭建团队知识管理体系?从入门到精通,你只差……
  2. 拜读近五年UT Austin Villa发表的RoboCup仿真3D论文
  3. humanoid ik unity 配件 animation的问题
  4. 如何获取网页真实地址
  5. 命名实体识别python_命名实体识别的两种方法
  6. 随笔 qsnctf misc三体
  7. hihocoder #1272 : 买零食
  8. Flume+Kafka+Strom基于伪分布式环境的结合使用
  9. 如何从生活中领悟设计模式
  10. 系统学习机器学习之特征工程(三)--多重共线性