无法解析的外部符号 __imp____acrt_iob_func 链接错误

问题描述 投票:0回答:1

尝试为 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"
windows visual-studio-2019 zlib nmake
1个回答
0
投票

一般来说,使用不同版本的 Visual C++ 编译器构建的代码不兼容链接。在某些特定情况下它可以工作,但大多数只是使用 C ABI 导入 DLL 的库(即像

KERNEL32.LIB
等之类的东西)

Visual C++ 团队一直在努力支持 VS 2015 Update 3 - VS 2022 的“前向链接兼容性”。请参阅 Microsoft Learn。 VS 2013 不属于此承诺的一部分。

您应该考虑使用像 VCPKG 这样的包管理器来管理 zlib,它可以确保您使用匹配的编译器工具集。

© www.soinside.com 2019 - 2024. All rights reserved.