由动态库文件dll生成lib库文件

从动态链接库(.dll)生成库文件(.lib)的方法 阅读详情

本文基于OpenBlas的编译和安装,来说明如何从一个dll文件生成lib库文件。

参考OpenBlas的说明“Howto generate import library for MingW”,和MinGW的说明HOWTO Create an ImportLibrary for a DLL using MinGW,学习如何生成lib库,其中OpenBlas的说明讲的是如何使用Visual studio的lib.exe工具从dll生成lib文件,而MinGW讲的是如何把一个windows的dll转变成MinGW可以使用的.a型的lib库。使用Visual studio的工具,从dll生成lib文件的具体步骤如下:

1. 编写bat批处理文件nmake.bat,做如下设置:

    setpath=%path%;"C:\Program Files\Microsoft Visual Studio 8\VC\bin"
    cmd.exe /kvcvars32.bat
2. 启动nmake.bat,进入OpenBals库的安装目录:


3.  使用dumpbin导出函数列表到某个文件中:

    dumpbin -exports libopenblas.dll>t.txt

4. 生成的t.txt中包含了dll文件的导出函数信息,如下:

Microsoft(R) COFF Binary File Dumper Version 6.00.8447
Copyright(C) Microsoft Corp 1992-1998. All rights reserved.
 
 
Dump of file libopenblas.dll
 
File Type: DLL
 
  Section contains thefollowing exports for libopenblas.dll
 
           0 characteristics
    53A0ED46 time date stamp Wed Jun 1809:37:10 2014
        0.00 version
           1 ordinal base
        7417 number of functions
        7417 number of names
 
    ordinal hint RVA      name
 
          3   0 000012C0 CAXPY
       3084   1 00248C30 CBBCSD
       2070   2 00158A30 CBDSQR
…
       5017 1CF7 004303C0 zupmtr
       5018 1CF8 004303C0 zupmtr_
 
  Summary
 
        1000 .CRT
      10E000 .bss
        2000 .data
       25000 .edata
       7D000 .eh_fram
        1000 .idata
       37000 .rdata
       21000 .reloc
      80D000 .text
        1000 .tls

5.  将t.txt中“ordinal hintRVA      name”一行之前以及下面“Summary”之后的内容全部删除,然后使用UtriEdit等带有列编辑功能的文本编辑器打开t.txt,切换到列模式:


6. 在最前面一列加入@(选择第一列,然后输入@即可);

7.  将name列移动到@前面;

8.  删除hint和RVA两列;

9. 在文件的前面添加两行,最后改造成下面这样:

LIBRARY libopenblas.dll
EXPORTS

 CAXPY                               @         3
 CBBCSD                              @      3084
 CBDSQR                              @      2070
 CCOPY                               @         6
 CDOTC                               @         9
 …
 …
 zupgtr                              @      5014
 zupgtr_                             @      5015
 zupmtr                              @      5017
 zupmtr_                             @      5018
10. 将上面改造完成后的文件重命名为libopenblas.def,然后使用lib命令,生成lib文件,如下:

       lib /machine:i386 /def:libopenblas.def
    对于64位的机器,使用:
      lib /machine:X64 /def:libopenblas.def
11. 至此,我们需要的lib库文件生成了,我们只需要在Visualstudio的包含目录里添加OpenBlas的include目录,在lib目录里包含lib库的目录,并且把libopenblas.lib加入到附加依赖项里就可以使用OpenBlas库了。

至于MinGW的帮助HOWTO Create an ImportLibrary for a DLL using MinGW讲的是我们在拥有dll文件的时候,如何生成MinGW可以使用的后缀为.a的lib库的步骤,这里假定我们至于libopenblas.dll,没有libopenblas.a,我们要生成libopenblas.a基本步骤如下:

1.  在mysys shell里,切换到dll文件所在目录;

2.  新建文本文件,命令为libopenblas.def,在其前面添加以下两行:

LIBRARY libopenblas.dll
EXPORTS
3.  根据编译器的连接错误提示,依次将无法连接的函数名加入到这个def文件中,一行一个;

4.  等定义完def文件后,使用下面的命令生成.a文件:

libtool –d libopenblas.def –l libopenblas.a

命令执行完毕后,生成的libopenblas.a文件就是MinGW的lib库文件。

这个说明中的第3步完全是基于MinGW的视角来看的,在Windows下,我们可以使用Visual studio的bumpbin来完成这个步骤,也就是前面讲的如何生成def文件的步骤。

另外Mingw实际上提供了一个工具用于完成这个事情,只是在HOWTO Create an ImportLibrary for a DLL using MinGW一文中他们自己都没有说清楚,对于libopenblass.dll,在MinGW下使用下面的命令生成def文件:

pexports libopenblas.dll > libopenblas.def
如果Mingw提示没有pexports命令,我们只需要使用Mingw-get安装一下即可:

mingw-get install pexports


VS2015 下编译静态库(lib)、动态库(dll),导入QT工程并链接生成的库文件,生成可执行文件(exe)再打包发布QT程序。 一、工程建立 1、不论是静态库还是动态库选择Win32控制台应用程序 2、静态库就选静态库,动态库就选DLL。如果是应用程序就选控制台应用程序。然后统一选择空项目。避免不必要的文件 二、静态库配置 1、确定好最上端的配置和平台。当要进行发布时配置应选择Release,平台可选择x64和x86,配置库文件名和输出目录。 2、配置依赖头文件, 即附加包含目录,为工程依赖的头文件路... 阅读详情

相关推荐

如何使用minGW和SMVC两种方法编译.dll动态库和.lib静态库

MinGW编译器的全称是 Minimalist GNU for Windows。它提供了一个开发环境,使开发者可以在Windows上编写、编译和调试使用C、C++、Fortran等语言编写的程序,MinGW的核心是GCC编译器。SMVC编译器的全称是 Simple Model-View-Controller,使用PHP框架,是Visual Studio软件中常用的编译方法。一般使用minGW编译出的动态库和静态库格式分别为.dll和.dll.a;

XJ_75的博客 2690

根据dll文件生成lib

例如,Qt Msvc2019编译的dll和lib给msvc201不能调用,因为lib文件不同,需要重新生成lib,或者更改加载dll的方式,即不用lib加载。其中test.def为def文件名,test.lib为生成的lib文件名,应该把test.lib该为fBodyImgprocessingLib.lib。不同版本的vs编译的dll在导出类的时候不能相互调用,直接导出函数是可以的,但有的也存在问题。第二步, 在该路径下新建def文件(新建txt,该后缀为def即可)第一步,更换目录 cd \DIR。

weixin_43294620的博客 2215

lib和dll静态库和动态库

无论哪种lib,都是给编译/链接阶段告诉链接器“你用的函数/类在哪里,是否存在”;静态库的lib:直接把代码复制进来;动态库的导入库:记录dll的位置信息,相当于“给链接器一个定心丸”。把库代码编译成二进制指令,打包成一个.dll文件,运行时才会被加载到内存。相当于“把别人写好的代码,放在一个‘共享文件’里,谁需要谁就临时来借(加载)”。

fucheng的博客 1067

从DLL生成LIB文件

设置VS2015运行环境 在开始菜单打开Visual Studio 2015\Visual Studio Tools\Windows Desktop Command Prompts\VS2015 x86 x64 Cross Tools Command Prompt 切换到DLL所在目录 在命令窗口输入 cd /d "你的DLL目录"回车切换到对应目录。 生成DEF文件 dumpbin...

sdhongjun的专栏 1万+

DLLtoLib转换工具

DLLtoLib是一个神奇的工具,它能把你程序中的DLL库转化成为静态库,让你的程序中没有DLL文件!

Dll to Lib 教程

转换成功后会出现 "dll名.lib"格式的静态库,现在就可以直接调用了

库文件、静态库(lib)与动态库(dll)的生成与使用

静态库 程序编译一般需经预处理、编译、汇编和链接几个步骤。在应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件;在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中。这种库称为静态库,其特点是可执行文件中包含了库代码的一份完整拷贝;缺点就是被多次使用就会有多份冗余拷贝。 动态库 动态库又称动态链接库英文为DLL,是Dynamic Link Library 的...

寂蝶难双,窃窃思羽. 9562

手势控制 Python !Leap Motion Python 开发教程 (二)

手势控制 Python !Leap Motion Python 开发教程 (二) 现在进入正题,我来给大家总结一下我在使用 Leap Motion 开发过程中的经验以及学到的东西,其中我会概括以及翻译官方给出的注释,为了让这些注释更加通俗易懂,让大家更好理解。 回顾 在上一篇文章中我们讲了如何配置 Leap Motion 的 Python 2.7 的开发环境,如果您还没有配置好您的开发环境,可以参...

成畅的博客 3193

C/C++库文件全了解(包含静态库、动态库,包含windows、linux,包含dll、lib、so)

目录C/C++库文件全了解一. 前言二. 名词解释2.1. windows的静态库:xxx.lib2.2. windows的动态库:xxx.dll2.3. linux的动态库:libxxx.so2.4. linux的静态库:xxx.a三. 自己编译库3.1 编译产生windows的静态库3.1.1代码准备:3.1.2 static_lib.cpp:3.1.3 static_lib.h:3.2 编译...

hsqyc的博客 1万+

Synopsys SpyGlass 进行 RTL 功耗估计

通过上述脚本,您可以使用 Synopsys SpyGlass 对纯 RTL 代码和带有 FSDB 波形的 RTL 代码进行功耗估计,并支持将 SDC 文件转换为 SGDC 文件。

yumingqinglong的博客 2186

3dsMax高效导入OSGB倾斜模型的3个关键步骤与插件应用

本文详细解析了在3dsMax中高效导入OSGB倾斜模型的三个核心步骤:建立索引、处理贴图路径以及选择合适的插件。针对导入过程中常见的模型崩溃、贴图丢失和操作卡顿问题,提供了从数据结构理解到插件选型的实战解决方案,帮助用户实现大规模实景模型在3dsMax中的流畅导入与编辑。

weixin_29238147的博客 468

Qt Creator生成动态库(DLL)并调用,保姆级教程

Qt Creator生成动态库(DLL)并调用,保姆级教程

清风 2942

KEPServer EX6的Modbus、MQTT和REST Server一站式配置整理说明

KEPServer EX6的Modbus、MQTT和REST Server一站式配置整理说明

syqenter的专栏 8961

loadlibrary函数的使用_C++库文件说明及使用方法

库文件VS2015中导入文件说明C++/C程序编译的过程可以粗分为两个阶段:编译和链接;编译又可以分为 预处理、编译、汇编三个阶段在编写编译C++的过程中有很多种文件,例如源文件,头文件,静态库文件,动态库文件等。每种类型的文件都有其存在的意义库文件库是一些函数和类的集合,其实现了某些特定的功能,是程序的开发免于从头开始。库有两种:静态链接库和动态链接库!在windows下静态链接库为....

weixin_39875167的博客 6143

个人信息保护合规审计人员(高级)能力考核试卷+面试模拟

《个人信息保护合规审计考试与面试指南》 摘要:本文提供个人信息保护合规审计考试及面试的全面指导。考试采用闭卷笔试形式,满分100分,合格线75分,时长120分钟,包含单选、多选、判断题及综合案例分析题。内容涵盖《个人信息保护法》核心条款、审计程序、风险评估等实务要点。面试环节采用情景模拟方式,重点考察应试者在压力下处理审计独立性、客户关系与监管要求的平衡能力,以及应对数据泄露等突发事件的处置流程。案例题聚焦大型互联网平台的数据收集、共享、跨境传输等高风险环节的合规审计,要求设计完整的审计方案框架。面试评分标

qq_41525079的博客 1142

机器学习初探——用线性回归预测股价趋势

在进入代码之前,先建立一个大框架。类型一句话解释金融中的应用监督学习给机器“标准答案”让它学预测股价(历史数据→未来价格)无监督学习不给答案,让机器自己找规律把相似股票自动归类、发现异常交易强化学习让机器通过“试错”学习最优策略AI自动交易、量化策略优化我们现阶段只学“监督学习”——这是最常用、最容易上手的。准备一堆“特征”和对应的“标签”(比如:历史的第N天 → 那天的价格)喂给机器一个“算法”(比如线性回归)机器“拟合”出一个规律(比如找到一条最合适的直线)

109

VS中如何编写和使用动态库--C++

首先我们需要创建两个项目: 一个动态库项目程序 一个使用动态库的项目程序 这里我的动态库中简单的写了一个加法运算的函数,供别人使用。 一、创建动态库 创建成功后的目录结构如下 新建一个class文件编写函数代码 这里我添加了一个AddFun类 在AddFun.h文件中添加了 #pragma once #ifdef DLL1_EXPORTS//C++预编译头 #define DLL1 __declspec(dllexport)//设置...

weixin_61196167的博客 6580

RK3568/RK3588 + YT 9215交换机芯片,MAC TO MAC 调试记录

原来的方案是rk3568 gmac 直接接phy,phy 接 switch 芯片,只是把交换芯片当交换用,驱动方面基本不用开发,但是要做vlan 那么必须涉及交换芯片的开发。选择裕太微有两个方面的原因:1.国产化替代2.可获得原厂技术支持3.目前已经完成 两个gmac 口交换芯片的配置,实现vlan,内部交换,两个光口可正常通信。

Nyiragongo的博客 1万+

lib和.dll是什么,他们之间的区别是什么

问题 我知道dll和lib包含了程序运行时必不可少的代码,但是除此之外我对lib和dll 了解不多。编译器究竟为什么生成这两个文件,直接把代码包含在exe里面不是更简单吗?lib和dll又有什么区别? I know very little about DLL’s and LIB’s other than that they contain vital code required for a program to run properly - libraries. But why do compilers

qq_29007291的博客 1418

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

上一篇: OpenBlas编译方法
下一篇: 使用lapack库求逆矩阵
深蓝静音
博客等级 码龄17年 263粉丝 68原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深蓝静音

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值