Libtool源码在Linux环境下编译成win32的动态库
1、linux下安装交叉编译器——mingw32
我用的是ubuntu虚拟机,直接使用终端命令安装即可:sudo apt-get install mingw32。
注意:如果此处安装失败,原因可能是Ubuntu系统的软件更新源有问题,换一下软件源即可。具体方法问度娘。
2、编译libtool
下载libtool源码
解压libtool软件包
进入解压后的lbtool目录,阅读readme或 install文件,查看详细介绍,或者直接./configure --help查看 配置文档的配方法。
生成libtool动态库
./configure --host=i586-mingw32msvc --prefix [指定目录]
./make && make install
指令成功后,会在[指定目录]中会生成四个文件夹:lib、bin、include、share ,其中bin目录下会有一个*.dll文件,此动态库文件就是win32下可用动态库,将所有文件夹拷贝到windows下。
3、生成dll对应的lib文件
win32下使用动态库开发时,必须要有两个文件:库文件(*.dl)l和库索引文件(*.lib)。而此时生成的库文件只有dll文件。因此需要我们手动生成对应的lib。windows下的lib库索引文件是根据def文件生成的,因此要生成lib文件,首先是要生成def文件。我使用的是pexports工具。当然也可以使用 VS 自带的 dumpbin 生成 def 文件,具体方法可以自行搜索。
3.1、下载pexports工具
pexports工具是MinGW的庞大工具集中的一个,它可以根据win32下的dll动态库生成其对应def文件。其下载地址:https://sourceforge.net/projects/mingw/files/MinGW/Extension/pexports/,点击进入后如下图:
可以选择mingw-get-setup.exe工具,此工具可以用来下载MinGW的所有工具集的,由于我只需要pexports这个工具,因此选择最新的版本pexports-0.47。点击进入后如下图:
下载成功后,解压,就会得到这个工具了:pexports.exe
3.2 使用pexports工具生成dll对应的def文件
将解压得到的pexports.exe,复制到VC安装目录:如D:\Microsoft Visual Studio 10.0\VC\bin下。
打开cmd窗口,执行 pexports libtool.dll -o > libtool.def
如果提示“pexports 不是内部或外部命令,也不是可执行文件或批处理文件”,这说明你没有把 D:\Microsoft Visual Studio 10.0\VC\bin 这个目录添加到环境变量path中。如果懒得添加可以直接在命令窗口下直接cd到此目录下,然后使用pexports可执行文件。此时使用此命令时需要加上路径了,如:pexports D:\libtool.dll -o > D:\libtool.def。
3.3 使用lib工具生成 lib文件
lib工具是VS自带的工具,就在D:\Microsoft Visual Studio 10.0\VC\bin目录下。
在命令窗口执行命令:lib.exe /DEF:libtool.def /MACHINE:IX86 /OUT:libtool.lib,指令成功后会生成libtool.exp和libtool.lib两个文件;
lib命令说明:
usage: LIB [options] [files]
options:
/DEF[:filename]
/EXPORT:symbol
/EXTRACT:membername
/INCLUDE:symbol
/LIBPATH:dir
/LIST[:filename]
/MACHINE:{AM33|ARM|EBC|IA64|M32R|MIPS|MIPS16|MIPSFPU|MIPSFPU16|MIPSR41XX|SH3|SH3DSP|SH4|SH5|THUMB|X86}
/NAME:filename
/NODEFAULTLIB[:library]
/NOLOGO
/OUT:filename
/REMOVE:membername
/SUBSYSTEM:{CONSOLE|EFI_APPLICATION|EFI_BOOT_SERVICE_DRIVER|
EFI_ROM|EFI_RUNTIME_DRIVER|NATIVE|POSIX|WINDOWS|
WINDOWSCE}[,#[.##]]
/VERBOSE
4、开发使用
生成lib文件后, *.dll和*.lib两个文件都有了,这个动态库就能在win32下开发使用了。