从DLL中输出LIB的方法

来源:互联网 发布:fontawesome mac 编辑:程序博客网 时间:2024/05/22 05:11

关键词:C/C++ VC GCC动态库输出连接文件

 

        最近下载了SQLite编译好的WIN32下的动态库,打算在开发的小软件中使用它,结果发现压缩包了只有defdll文件,缺lib文件。虽然可以采用LoadLibrary的方式加载里面的函数,但是总感觉方便性和代码的可读性都不大好,于是想是否可以从DLL中导出lib文件呢,经过从网上搜索的信息,结果尝试,终于成功地导出lib文件,现将完成这个功能的方法和所需要的一些文件整理,并集成一个批处理文件提供出来,方便有类似需求的朋友不再走重复的道路。

       我们知道,按C标准的方式生成的DLL库,无论是VC系列还是GCC系列,其DLL库在二进制上是兼容的,即可以在VC中使用GCC编译的库,反之亦然。(注意,C++方式生成的DLL库不是二进制兼容的,彼此不能相互调用)。一些著名的开源库,比如FFMPEGSQLite等,它们各种版本的动态库和头文件都可以很容易地获得,如果能获取相应的lib文件,那对我们在开发中使用这些库是很方便的。

     通过整理,从DLL文件中导出LIB文件,需要以下几个小程序,他们分别是pexports.exe,

导出def 定义文件,dlltool导出GCC所需的以.a为后缀的连接文件,LIB.exe导出VC所需的以.lib为后缀的连接文件。

      建立一个批处理文件export_lib.bat,其代码如下:

              pexports %1.dll > %1.def

              rem export GCC .a file

             dlltool --dllname %1.dll --def %1.def --output-lib %1.dll.a

             rem export VC .lib file

             LIB /DEF:%1.def /MACHINE:IX86

使用方法:假设我们要从sqlite3.dll中导出连接文件,在Windows的命令行工具中输入export_lib sqlite3则可以一步导出GCCVC所需的连接文件。或者在同一目录下建一个批处理文件 sqlite_lib.bat。该文件的内容为:

            call export_lib sqlite3

双击sqlite_lib.bat,即可导出需要的连接文件。

 

工具下载地址:http://download.csdn.net/detail/seniorwizard/4413697