尝试为 Windows 编译 zlib 1.2.13。 无法解决下面的链接器错误,感谢任何帮助!
Creating library zdll.lib and object zdll.exp
[2023-08-09T07:50:09.645Z] if exist zlib1.dll.manifest mt -nologo -manifest zlib1.dll.manifest -outputresource:zlib1.dll;2
[2023-08-09T07:50:10.227Z] cl -c -I. -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE -D_NO_CRT_STDIO_INLINE -nologo -MD -W3 -O2 -Oy- -Zi -Fd"zlib" ./test\example.c
[2023-08-09T07:50:10.227Z] example.c
[2023-08-09T07:50:10.227Z] link -nologo -debug -incremental:no -opt:ref example.obj zlib.lib
[2023-08-09T07:50:10.227Z] example.obj : error LNK2019: unresolved external symbol __imp____acrt_iob_func referenced in function _main
[2023-08-09T07:50:10.227Z] example.exe : fatal error LNK1120: 1 unresolved externals
[2023-08-09T07:50:10.227Z] NMAKE : fatal error U1077: '"c:\program files (x86)\microsoft visual studio 12.0\vc\bin\link.EXE"' : return code '0x460'
[2023-08-09T07:50:10.227Z] Stop.
我的lib环境变量:
$env:lib += ";c:\program files (x86)\microsoft visual studio 12.0\vc\lib"
$env:lib += ";c:\program files (x86)\windows kits\10\lib\10.0.19041.0\um\x86"
$env:lib += ";c:\program files (x86)\windows kits\10\lib\10.0.19041.0\um\x64"
$env:lib += ";c:\program files (x86)\windows kits\10\lib\10.0.19041.0\ucrt\x86"
$env:lib += ";c:\program files (x86)\windows kits\10\lib\10.0.19041.0\ucrt\x64"
$env:lib += ";c:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\lib\x86"
$env:lib += ";c:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\lib\x64"
一般来说,使用不同版本的 Visual C++ 编译器构建的代码不兼容链接。在某些特定情况下它可以工作,但大多数只是使用 C ABI 导入 DLL 的库(即像
KERNEL32.LIB
等之类的东西)
Visual C++ 团队一直在努力支持 VS 2015 Update 3 - VS 2022 的“前向链接兼容性”。请参阅 Microsoft Learn。 VS 2013 不属于此承诺的一部分。
您应该考虑使用像 VCPKG 这样的包管理器来管理 zlib,它可以确保您使用匹配的编译器工具集。