.dll、.lib、.a的转换_a文件与lib文件转换_witton的博客-程序员秘密

技术标签: .a  lib  dll  MSYS2  Windows    生成  

一、.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脚本。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/witton/article/details/108146853

智能推荐

第13周项目4(2)字符数组排序_aczhangweijian的博客-程序员秘密

/**Copyright (c)2014,烟台大学计算机与控制工程学院*All rights reserved.*文件名称:ccc.cpp*作    者  张伟建*完成日期:2014年11月22日*版 本 号:v1.0**问题描述: 字符数据排序*输入描述:*输出描述:*/#includeusing namespace std;void bu

LaTex常见问题汇总(持续更新)_latex报错_afucat的博客-程序员秘密

LaTex常见问题汇总报错问题&符号引发的错误Latex报错 ! Misplaced alignment tab character &此时,只需要在.bib文件里找到对应的&符号,并改为\&即可。这是由于特殊表意符号,没有进行标注导致的错误。...

k8s 使用 CronJob 运行自动化任务_k8s job 如何跑脚本_大熊程序猿的博客-程序员秘密

创建 CronJobcronjob.yamlapiVersion: batch/v1beta1kind: CronJobmetadata: name: hellospec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: containers: - name: hello image: busybox .

SpringBoot 中常用注解@Controller/@RestController/@RequestMapping介绍_sifanlook的博客-程序员秘密

1.Controller 一般要和http请求配合使用 。@Controller 处理http请求@Controller//@ResponseBodypublic class HelloController { @RequestMapping(value="/hello",method= RequestMethod.GET) public String sayHell...

python代码覆盖率coverage简介与用法_weixin_30791095的博客-程序员秘密

如果衡量单元测试对相应代码的测试重量,覆盖率是一个必要非充分条件,因此统计代码的覆盖率,检视单测是否充分,就尤为的重要。这里针对python-unittest的单测的覆盖率coverage进行使用说明与分析.参考链接:https://blog.csdn.net/xiaoxinyu316/article/details/53695342coverage简介:coverage是一种用...

随便推点

【微信小程序】实现文字按照次序逐个自动显示出来_微信小程序模拟输入状态逐字显示_是锦鲤吖的博客-程序员秘密

【应用初衷】在做的小程序项目中,有一个需求需要实时显示已读的内容,定位读到哪里了,由此才联想到使用这样一个功能。从看了很多的文章资料发现一个头疼的问题,没效果图,不够直接展示实现的功能,那我这里就先放一个效果图,看是否符合,不符合就直接跳过吧。。。【效果图】废话不多说,直接上代码。。。【代码模块】核心逻辑主要涉及到两个文件 [.wxml]、[.js],可根据实际情况加些样式之类的,这里简单列举核心代码:[.wxml]:<view><view>{...

常用数据库选型!你做对了吗?-程序员秘密

点击关注公众号,回复“1024”获取2TB学习资源!影响数据库选择的因素数据量:是否海量数据,单表数据量太大会考验数据库的性能数据结构:结构化 (每条记录的结构都一样) 还是非结构化的 (...

五虎棋_a1270490939的博客-程序员秘密

五虎棋是流传在东北民间的一种游戏,GG小的时候,经常被表哥虐得很惨。由于各个地区的规则可能不大相同,并且GG的回忆不一定很准,所以,如果规则和你平常玩的的有冲突,请以这里为主。棋盘是横五条,纵五条直线,形成25个交叉点,双方轮流把棋子放到交叉点上 (由于所需各自和棋子数目不多,才12+13,GG小的时候,用的是象棋的棋盘和棋子,真的用大棋盘很爽~~~)当双方把棋盘下满之后(先手下了13

JSOI2017 垫底记 幸好不是自己省选系列..._YxuanwKeith的博客-程序员秘密

Day 17:10分闹钟响了,觉得有点困,就又在床上摊了一会儿。到楼下后已经30多了…等早餐的时候,一开始煮面大妈有点断线,差点迟到翻车。本来想买杯咖啡清醒一下,结果常州一中旁边的小卖部居然都没开门…最后不得已在有个文具店的小角落找到了一瓶奶茶顶替,很尴尬。(在我脑海里面之前JSOI的题都不难,所以感觉今天早上还是可以做的很爽的——-flag已立)到机房,刚调好gdb考试就开始了。先看完题目,第三题

新手速成---TensorFlow实现jaffe表情识别--准备工作+step1_a5pansq的博客-程序员秘密

背景正如前文讲的,博主主要是为了交作业。。。作业三选一,牛津花卉数据集、jaffe表情数据集、股票预测,很显然我选的表情识别。JAFFE数据集一共有213张图像.选取了10名日本女学生,每个人做出7种表情.7种表情包括: Angry,Disgust,Fear,Happy,Sad,Surprise,Neutral.(愤怒,厌恶,恐惧,高兴,悲伤,惊讶,中性)格式:tiff将其中的193幅图像作...

非计算机专业的渣本程序员四面阿里折戟,苦熬一个月三面进美团,鬼知道我是怎么经历过来的!_普通网友的博客-程序员秘密

本人是一名本科毕业非计算机专业的程序员,面了阿里,结果没过,最后面上了美团,热乎乎的面经,昨天面的美团,虽然面完了HR面,但是感觉希望不大,希望能走运拿到offer吧。记性不是太好,有一些问题没能记住,三面技术面面经如下:美团一面:中间省略掉大概几个问题,因为我不记得了,下面记得的基本都是我没怎么答好的。1、了解SOA,微服务吗? 2、分布式系统如何负载均衡?如何确定访问的资源在哪个服务器上?一.轮询。二.随机。三.最小响应时间。四. 最小并发数。五.哈希。 3、设计一个分布式负载.