精华内容
下载资源
问答
  • 动态库文件dll生成lib文件

    万次阅读 2014-06-18 11:02:55
    本文基于OpenBlas的编译和安装,来说明如何从一个dll文件生成lib库文件。 参考OpenBlas的说明“Howto generate import library for MingW”,和MinGW的说明HOWTO Create an ImportLibrary for a DLL using MinGW,...

    本文基于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


    展开全文
  • 因为这次需要调用其他库再生成自己的动态库,在最开始的时候只生成Dll文件 没有lib文件。 解决,是把需要调用的库的两个dll文件放在执行文件的路径下,保证封装的函数能成功运行调用这个库,才能将函数导出。 ...

    因为这次需要调用其他库再生成自己的动态库,在最开始的时候只生成Dll文件 没有lib文件。

    解决,是把需要调用的库的两个dll文件放在执行文件的路径下,保证封装的函数能成功运行调用这个库,才能将函数导出。

    win32动态库只生成Dll文件 怎么没有lib文件

    展开全文
  • 动态库生成不lib文件 原因:路径不对 pro文件 INCLUDEPATH += ../../include/base/httpserver \ ../../include/base/universalconfig \ ../../include/base

    动态库生成不了lib文件

    环境:win7 + QT5

    QT5在开发中在编译动态库时,未生成lib文件,遇到的主要的问题是没写路径,所以没有在相应的路径下生成相应的lib文件。

    解决方案:在pro文件中添加相应路径,如下所示:

    pro文件

    INCLUDEPATH += ../../include/base/httpserver \
                                    ../../include/base/universalconfig \
                                    ../../include/base/log \
                                    ../../include/base/sysapi \
                                    ../dmssvr
    CONFIG(debug, debug|release){
    TARGET = phoneService_d
    LIBS += -L../../../lib_d \
                    -lsysapi_d \
                    -luniversalconfig_d \
                    -llog_d \
                    -lhttpserver_d
     
    
     
    
    MOC_DIR = ../../../obj_d/phoneService/.moc     #moc文件路径
    OBJECTS_DIR = ../../../obj_d/phoneService/.obj          #obj文件路径
    UI_DIR = ../../../obj_d/phoneService/.ui                #ui文件路径
    RCC_DIR = ../../../obj_d/phoneService/.qrc              #rcc文件路径
    DESTDIR += ../../../lib_d                        #程序路径
    DLLDESTDIR 	= ../../../bin_d		     #dll路径                      #程序路径
    }
    else{
    TARGET = phoneService
    LIBS += -L../../../lib \
                    -lsysapi \
                    -luniversalconfig \
                    -llog \
                    -lhttpserver
     
    
    MOC_DIR = ../../../obj/phoneService/.moc     #moc文件路径
    OBJECTS_DIR = ../../../obj/phoneService/.obj          #obj文件路径
    UI_DIR = ../../../obj/phoneService/.ui                #ui文件路径
    RCC_DIR = ../../../obj/phoneService/.qrc              #rcc文件路径
    DESTDIR += ../../../lib                       #程序路径
    DLLDESTDIR 	= ../../../bin		     #dll路径
    }

    展开全文
  • Qt 编译动态库生成dll没有lib文件

    千次阅读 2020-11-24 11:27:16
    背景描述: ... 主动修改库A为动态库(.pro文件去除CONFIG += staticlib),只生成dll而无lib文件; 现象a原因和解决方案: 原因:库A部分组件加载时涉及C++和C底层库,VS编译时可由VS编译环境完成查找和

    背景描述:

    库A开发最初是以静态库形式存在,随着时间推移项目功能逐渐增多,涉及库A的内容也增多。组内成员开发各有习惯,QtCreator和VS2015未作限制。

    现象:

    1. VS2015编辑器下正常编译和使用,使用QtCreator进行库A编译时发现无法编译成功,错误信息Lnk2019;
    2. 主动修改库A为动态库(.pro文件去除CONFIG += staticlib),只生成dll而无lib文件;

    现象a原因和解决方案:

    原因:库A部分组件加载时涉及C++和C底层库,VS编译时可由VS编译环境完成查找和链接,Qtcreator编译则缺少对应链接信息,导致报错Lnk2019;

    解决方案:找到对应链接库,写入到.pro文件链接路径即可;

    现象b原因和解决方案:

    原因:动态库导出需要包含dllexport信息,静态编译时此部分直接忽略,转动态库时完全忘记还有此项内容。。。。

    解决方案:如下添加动态链接信息即可; 

    #ifdef WIN32
        #ifdef MYLIBRARY_EXPORT_DEF
            #define MYLIBRARY_EXPORT __declspec(dllexport)
        #else
            #define MYLIBRARY_EXPORT __declspec(dllimport)
        #endif
    #else
        #define MYLIBRARY_EXPORT
    #endif
    
    #ifdef WIN32
        #ifdef MYLIBRARY_API_DEF
            #define MYLIBRARY_API __declspec(dllexport)
        #else
            #define MYLIBRARY_API __declspec(dllimport)
        #endif
    #else
        #define MYLIBRARY_API
    #endif

     

    展开全文
  • 在导出函数在声明和定义时,都一定要有关键字 _declspec(dllexport) ,这样才会同时生成 .dll 和 .lib 文件。 demo: 接口头文件: #pragma once extern "C" _declspec(dllexport) int addtest(int a, int b); ...
  • 生成动态链接DLL但未生成lib文件的解决办法
  • MFC动态库生成文件lib和.dll讨论

    千次阅读 2011-05-05 17:46:00
    静态编译的lib文件有好处:给用户安装时就需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。  .dll是在你的程序
  • C++ dll只生成dll文件,而未生成lib文件的问题逐项检查 逐项检查 新建项目时,选择应用程序类型为dll,并勾选“Export Symbols”; 属性->链接器->高级->导入库 中定义输出...
  • 最近在尝试VS2010,但是在使用向导生成动态库之后却无法产生LIB文件。解决方法其实很简单,是因为缺少.def文件。 只需要在工程上右键->添加->新建项->模块定义文件(.def)->随便输入个名字->添加,就可以了。 vs自动...
  • 很多朋友想使用VS2015生成动态库(因入库lib文件和dll文件),但根据网上资料生成的却只有dll文件,没有lib文件,主要原因是没有按照指定格式去写代码,下面我写出一个通用的模板来简单阐述怎么生成lib文件和dll文件...
  • vs2008中编译动态库生成lib的设置

    千次阅读 2009-04-20 09:22:00
    在vs2008中编译动态库时,有时候不会生成对应的lib文件(我是由原来的一个工程,别人写的,生成静态库,我现在改成了动态库,但一直不会生成lib文件)找了好半天才找到了解决方法 首先在工程中像vc6一样生成def文件,...
  • 这是在VC6中利用动态链接工程生成dll和lib文件的简单例程。 1. 创建动态链接工程。 2. 创建完成后,创建add.h文件,如下。 #ifndef __ADD_H__ #define __ADD_H__ #include __declspec(dl
  • 但是,官网上仅提供了 1.0.0.4 版本的 SDK,使用过程中发现,很多函数都能用,比如:调节了视频色彩参数,能设置 8 路视频显示等等,但是它自带的管理软件是可以实现这些功能的。经过比对,发现它自己使用的是...
  • 由于windows在动态链接的时候,必须从dll文件对应的lib文件里面寻找可链接程序的标志符,因此当你编译生成一个动态库的时候,必须生成相应的lib文件。  有两种方法,一种是 1、在命令行执行: dumpbin /exports...
  • VS生成DLL没有生成LIB文件的解决方法

    千次阅读 2018-12-21 16:38:03
    1、在所建工程上单击鼠标右键,在弹出的右键菜单中选择“添加--&...模块定义文件”中填写刚才定义的def文件,然后再重新编译即可生成LIB文件。 2、新建->win32项目->->dll...
  • 一、静态库和动态库1、静态库(.lib) 函数和数据被编译进一个二进制文件(通常扩展名为.LIB)。在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制... 2、动态库(.lib文件和.dll文件) 在使用动态
  • 由.def文件生成lib文件

    千次阅读 2013-08-01 21:42:05
    最近在学习curl时,碰到一个问题,从官网上下载了一个lib版的,却发现只有.dll,没有lib文件,感觉很奇怪,google了之后才知道,原来作者的用意是让用户自己生成lib文件,下载到的lib文件中含有.def文件。...
  • 然后想引用到另一个项目b中去,这个项目如果设置同样生成静态库,就正常编译后生成b.lib,但是我需要的是动态库(b.dll),然而当我将属性页配置类型改为动态库再编译时提示“error LNK1104:无法打开文件a.lib”。...
  • 一个解决方案中好几个工程,其中有一个工程需要生成动态链接的,但是一直提示无法找到lib,发现这个工程没有生成lib文件 网上一顿搜索, 下面是解决办法: 地址:...
  • 【原文:... 在"Projet"->"Settings..."的"Link"选项卡中 "Output file name"中设置dll的输出路径 ...Project options:中可以看到刚刚设置生成的DLL路径, 紧跟着就是
  • 工程没有生成lib文件,只生成了dll文件

    万次阅读 热门讨论 2011-07-09 11:35:25
    一个解决方案中好几个工程,其中有一个工程需要生成动态链接的,但是一直提示无法找到lib,发现这个工程没有生成lib文件网上一顿搜索,下面是解决办法:地址:...
  • .h头文件 .lib文件 .dll动态库文件之间的关系

    万次阅读 多人点赞 2013-10-12 11:56:52
    附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件。如果要完成源代码的编译和链接,有头文件和lib就够了。如果也使动态连接的程序运行起来,有dll就够了。在开发和调试阶段,当然最好都有。 .h .lib ....
  • ...附加依赖项的是.lib不是.dll,若生成了dll,则肯定也生成lib文件。如果要完成源代码的编译和链接,有头文件和lib就够了。如果要使需要动态连接的程序运行起来,有dll就够了。在开发和调试阶

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 124,448
精华内容 49,779
关键字:

动态库不生成lib文件