未解决___stdio_common_vsprintf_s,哪个库有这个?

edd*_*dyq 2 c crt visual-studio-2015

我正在使用 VS2015 社区。我已经获得了一些我正在尝试构建的 C 代码。这一切都在 C 中,我已经将一个项目作为控制台应用程序。

当我构建时,出现以下错误。问题是在链接过程中找不到__stdio_common_vsprintf_s。所以我在互联网上搜索了符号,但没有得到任何有用的信息。

我正在使用名为多线程 (/MT) 的运行时库设置。

我曾尝试在所有包含之前添加 #define STDC_WANT_LIB_EXT1 1 ,但这没有帮助。我已经搜索过这个问题,但没有找到任何有帮助的帖子。

所以我搜索了所有的 VS 库,得到了很多点击,但我不知道哪些是定义,哪些是引用。然后我搜索了 VS 包含文件夹中的所有 .h 文件,但没有找到。

我怀疑可能还有另一个我需要的图书馆,但不知道它是什么。有没有人有任何想法?

1>LIBCMT.lib(_error_.obj) : error LNK2019: unresolved external symbol ___stdio_common_vsprintf_s referenced in function __vsprintf_s_l
1>LIBCMT.lib(_pdblkup_.obj) : error LNK2019: unresolved external symbol ___vcrt_GetModuleFileNameW referenced in function "int __cdecl _RTC_GetSrcLine(unsigned char *,wchar_t *,unsigned long,int *,wchar_t *,unsigned long)" (?_RTC_GetSrcLine@@YAHPAEPA_WKPAH1K@Z)
1>LIBCMT.lib(_pdblkup_.obj) : error LNK2019: unresolved external symbol ___vcrt_LoadLibraryExW referenced in function "struct HINSTANCE__ * __cdecl GetPdbDllFromInstallPath(void)" (?GetPdbDllFromInstallPath@@YAPAUHINSTANCE__@@XZ)
1>MSVCRTD.lib(_chandler4gs_.obj) : error LNK2019: unresolved external symbol __except_handler4_common referenced in function __except_handler4
1>W:\efifs\Debug\testing.exe : fatal error LNK1120: 6 unresolved externals
Run Code Online (Sandbox Code Playgroud)

以下是我的选择:

Compile
----------
/GS 
/analyze- 
/W3 
/Zc:wchar_t 
/I"W:\efifs\\gnu-efi\inc" 
/I"W:\efifs\\gnu-efi\inc\ia32" 
/I"W:\efifs\\grub\include" 
/I"W:\efifs\\grub-core\lib\minilzo" 
/I"W:\efifs\testing\" 
/I"W:\efifs\\gnu-efi\inc\protocol" 
/I"W:\efifs\\gnu-efi\lib" 
/I"W:\efifs\\include" 
/I"W:\efifs\\grub\grub-core\lib\minilzo" 
/I"W:\efifs\.msvc" 
/ZI 
/Gm 
/Od 
/Fd"Debug\vc140.pdb" 
/Zc:inline 
/fp:precise 
/D "__STDC_WANT_LIB_EXT1__=1" 
/D "_UNICODE" 
/D "UNICODE" 
/D "GRUB_FILE=__FILE__" 
/D "HAVE_USE_MS_ABI" 
/D "GNU_EFI_USE_EXTERNAL_STDARG" 
/D "DRIVERNAME=testing" 
/D "WIN32" 
/D "_DEBUG" 
/D "_CONSOLE" 
/errorReport:prompt 
/WX- 
/Zc:forScope 
/RTC1 
/Gd 
/Oy- 
/MT 
/Fa"Debug\" 
/EHsc 
/nologo 
/Fo"Debug\" 
/Fp"Debug\testing.pch" 

Link
-----
/OUT:"W:\efifs\Debug\testing.exe" 
/MANIFEST 
/NXCOMPAT 
/PDB:"W:\efifs\Debug\testing.pdb" 
/DYNAMICBASE "efifs.lib" "grub.lib" "gnu-efi.lib" "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" "comdlg32.lib" "advapi32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" 
/MACHINE:X86 
/INCREMENTAL 
/PGD:"W:\efifs\Debug\testing.pgd" 
/SUBSYSTEM:CONSOLE 
/MANIFESTUAC:"level='asInvoker' uiAccess='false'" 
/ManifestFile:"Debug\testing.exe.intermediate.manifest" 
/ERRORREPORT:PROMPT 
/NOLOGO 
/LIBPATH:"W:\efifs\testing\\grub" 
/LIBPATH:"W:\efifs\testing\\efifs" 
/LIBPATH:"W:\efifs\testing\\gnu-efi" 
/TLBID:1 
Run Code Online (Sandbox Code Playgroud)

小智 8

如果您查看 vsprintf 是如何声明的,您可以跟踪它 corecrt_stdio ... 它说要内联它的地方。

我有一些旧的 DLL,它们链接到旧的 msvcrt 并尝试从中导入 vsprintf,但似乎 VS2015 有新的标头并试图内联它。

设置 _NO_CRT_STDIO_INLINE 有助于解决它,享受。

编辑:还有https://msdn.microsoft.com/en-us/library/bb531344.aspx


Ros*_*dge 5

您的配置似乎不正确。您似乎没有链接到Visual Studio 2015 对 C 运行时库的重组中添加的几个新。你似乎也与两个连接释放静电(/ MT)和调试DLL相同库(/ MDD)的版本,特地LIBCMT.libMSVCRTD.lib

该符号___stdio_common_vsprintf_s可以在 Windows 10 SDK 的通用 CRT 中找到。该库的发布静态版本称为libucrt.lib. 其他未解析的符号是“vcruntime”库的一部分,它是 Visual Studio 2015 的一部分。它的发布静态版本的名称是libvcruntime.lib.

不清楚为什么您没有与正确的库链接。通常这会自动为您处理。您需要检查项目的配置设置以查看覆盖默认行为的位置。