lib 静态库转 dll 动态库需要有一个链接的过程,将其依赖的外部符号与对应的库链接起来,Visual Studio 中的 link 工具提供了此功能。

在 windows 的命令行下,需要先运行 vcvars64.bat 初始化编译环境,才能使用 link 工具,以 Visual Studio 2017 为例, vcvars64.bat 位于 C:\Program Files(x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build 目录下,可通过以下命令初始化编译环境:

set INSTALLPATH=
if exist "%programfiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" (
  for /F "tokens=* USEBACKQ" %%F in (`"%programfiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -version 15.0 -property installationPath`) do set INSTALLPATH=%%F
)
echo INSTALLPATH is "%INSTALLPATH%"
REM Save current dir for later
pushd %CD%
if NOT "" == "%INSTALLPATH%" (
  call "%INSTALLPATH%\VC\Auxiliary\Build\vcvars%ARCH:~-2%.bat"
) else (
  goto ERROR_NO_VS15
)
:WORK
REM Retrieve the working dir and proceed
popd
echo Doing work in %CD%
// ......
goto END

:ERROR_NO_VS15
echo Visual Studio 2017 Tools Not Available!

:END
echo Processing ends.

编译环境初始化之后,可通过以下命令来链接 lib 库,生成 dll:

link /OUT:"xxxx.dll" /IMPLIB:"xxxx_imp.lib" /DYNAMICBASE "Ws2_32.lib" "CRYPT32.LIB" /DEBUG:FASTLINK /DLL /MACHINE:x64 /ERRORREPORT:PROMPT  /NOLOGO /LIBPATH:"依赖的第三方库的lib路径1" /LIBPATH:"依赖的第三方库的lib路径2" /DEF:"xxxx.def" xxxx.lib

说明:

  • /OUT : 生成的 dll 路径

  • /IMPLIB : 生成的 dll 的引入库,相当于头文件,定义了相关导出函数

  • /DYNAMICBASE : 可选,静态库依赖的三方库和系统库,多个库用空格隔开

  • /MACHINE : x86 / x64

  • /LIBPATH : 可选,依赖的第三方库的查找路径

  • xxx.lib : 要链接的 lib 静态库,可多个

  • /DEF : dll 导出函数,格式如下

    LIBRARY xxxx //dll名称
      
    EXPORTS	     //导出的函数名列表
    	function1
    	function2
    	.....
    
本文出自 kingizz's blog - windows lib 静态库转 dll 动态库,转载请注明出处。如果您觉得我发布的资源对您有用,请给我捐助,这样我会更有动力编写更优质的内容。

如果您觉得文章有用,请微信扫描二维码捐助我,让我做得更好