MSVC 2019:遗留库中的 libc 外部未解决
MSVC 2019: libc externals in legacy library not resolved
我正在将旧版应用程序(最初使用 VC 6.0 编译)移植到 MSVC 2019。它使用旧版静态库 (libtest.lib),使用 [=51] 编译=] 6.0。我的问题是 libtest.lib 中的一些(但不是全部)标准 libc 函数没有被 MSVC 2019 解决。
例如,libtest.lib 使用 vsprintf()。在编译时 MSVC 2019 报告“未解析的外部符号 _vsprintf 在... 中引用”。其他 libc 函数(例如 strlen)解析得很好。
我试过大量的构建设置,但并不开心。
为什么会发生这种情况,我该如何解决?
我目前的研究...
我在 VC60 headers 中做了很多挖掘,发现 vsprintf 在 studio.h 中定义为
_CRTIMP int __cdecl vsprintf(char *,const char *, va_list);
while strlen 在 string.h 中定义
作为
size_t __cdecl strlen(const char *);
我不确定其中的含义,但我猜测 strlen 只是一个 plain-vanilla 静态函数,而 vsprintf 是从某些 CRT DLL 导入的(在 MSVC 2019 中可能有所不同)。
我想我也可以将 libtest.lib 移植到 MSVC 2019,但我还有将近 100 个其他静态库,将它们全部移植将是一个主要的痛苦。
感谢@dewaffled 的精彩回答:
Microsoft 有一个库可以使 CRT 函数适应最新版本的 MSVC,例如 2019
只需将以下行添加到您的主程序中:
#pragma comment(lib, "legacy_stdio_definitions.lib")
或者,我认为您可以将库添加到:
Project Properties -> Linker -> Input -> Additional Dependencies
我正在将旧版应用程序(最初使用 VC 6.0 编译)移植到 MSVC 2019。它使用旧版静态库 (libtest.lib),使用 [=51] 编译=] 6.0。我的问题是 libtest.lib 中的一些(但不是全部)标准 libc 函数没有被 MSVC 2019 解决。
例如,libtest.lib 使用 vsprintf()。在编译时 MSVC 2019 报告“未解析的外部符号 _vsprintf 在... 中引用”。其他 libc 函数(例如 strlen)解析得很好。
我试过大量的构建设置,但并不开心。
为什么会发生这种情况,我该如何解决?
我目前的研究...
我在 VC60 headers 中做了很多挖掘,发现 vsprintf 在 studio.h 中定义为
_CRTIMP int __cdecl vsprintf(char *,const char *, va_list);
while strlen 在 string.h 中定义 作为
size_t __cdecl strlen(const char *);
我不确定其中的含义,但我猜测 strlen 只是一个 plain-vanilla 静态函数,而 vsprintf 是从某些 CRT DLL 导入的(在 MSVC 2019 中可能有所不同)。
我想我也可以将 libtest.lib 移植到 MSVC 2019,但我还有将近 100 个其他静态库,将它们全部移植将是一个主要的痛苦。
感谢@dewaffled 的精彩回答:
Microsoft 有一个库可以使 CRT 函数适应最新版本的 MSVC,例如 2019
只需将以下行添加到您的主程序中:
#pragma comment(lib, "legacy_stdio_definitions.lib")
或者,我认为您可以将库添加到:
Project Properties -> Linker -> Input -> Additional Dependencies