Libtool源码在Linux环境下编译成win32的动态库

xiaoxiao2021-03-01  32

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下开发使用了。

转载请注明原文地址: https://www.6miu.com/read-3450036.html

最新回复(0)