【问题标题】:How to configure visual studio to only use the C standard library?如何将 Visual Studio 配置为仅使用 C 标准库?
【发布时间】:2021-08-29 23:55:18
【问题描述】:

如何在 Visual Studio 2019 中配置 Visual C++ 项目以仅使用 C 标准库?

我尝试将项目的链接器输入设置下的“忽略所有默认库”设置为“是”,然后在“附加依赖项”下添加msvcrt.lib

我得到了这些错误:

1>msvcrt.lib(exe_main.obj) : error LNK2019: unresolved external symbol __seh_filter_exe 
referenced in function "int __cdecl __scrt_common_main_seh(void)" (? 
__scrt_common_main_seh@@YAHXZ)
1>msvcrt.lib(exe_main.obj) : error LNK2019: unresolved external symbol __set_app_type 
referenced in function "int __cdecl pre_c_initialization(void)" (?pre_c_initialization@@YAHXZ)
1>msvcrt.lib(exe_main.obj) : error LNK2019: unresolved external symbol ___setusermatherr 
referenced in function "int __cdecl pre_c_initialization(void)" (?pre_c_initialization@@YAHXZ)
1>msvcrt.lib(exe_main.obj) : error LNK2019: unresolved external symbol __configure_narrow_argv 
referenced in function "int __cdecl pre_c_initialization(void)" (?pre_c_initialization@@YAHXZ)
1>msvcrt.lib(utility.obj) : error LNK2001: unresolved external symbol __configure_narrow_argv
1>msvcrt.lib(exe_main.obj) : error LNK2019: unresolved external symbol 
__initialize_narrow_environment referenced in function "int __cdecl 
pre_c_initialization(void)" (?pre_c_initialization@@YAHXZ)
1>msvcrt.lib(utility.obj) : error LNK2001: unresolved external symbol 
__initialize_narrow_environment
1>msvcrt.lib(exe_main.obj) : error LNK2019: unresolved external symbol 
__get_initial_narrow_environment referenced in function "int __cdecl 
__scrt_common_main_seh(void)" (?__scrt_common_main_seh@@YAHXZ)
1>msvcrt.lib(exe_main.obj) : error LNK2019: unresolved external symbol __initterm referenced 
in 
function "int __cdecl __scrt_common_main_seh(void)" (?__scrt_common_main_seh@@YAHXZ)
1>msvcrt.lib(exe_main.obj) : error LNK2019: unresolved external symbol __initterm_e referenced 
in function "int __cdecl __scrt_common_main_seh(void)" (?__scrt_common_main_seh@@YAHXZ)
1>msvcrt.lib(exe_main.obj) : error LNK2019: unresolved external symbol _exit referenced in 
function "int __cdecl __scrt_common_main_seh(void)" (?__scrt_common_main_seh@@YAHXZ)
1>msvcrt.lib(exe_main.obj) : error LNK2019: unresolved external symbol __exit referenced in 
function "int __cdecl __scrt_common_main_seh(void)" (?__scrt_common_main_seh@@YAHXZ)
1>msvcrt.lib(exe_main.obj) : error LNK2019: unresolved external symbol __set_fmode referenced 
in function "int __cdecl pre_c_initialization(void)" (?pre_c_initialization@@YAHXZ)
1>msvcrt.lib(exe_main.obj) : error LNK2019: unresolved external symbol ___p___argc referenced 
in function "int __cdecl __scrt_common_main_seh(void)" (?__scrt_common_main_seh@@YAHXZ)
1>msvcrt.lib(exe_main.obj) : error LNK2019: unresolved external symbol ___p___argv referenced 
in function "int __cdecl __scrt_common_main_seh(void)" (?__scrt_common_main_seh@@YAHXZ)
1>msvcrt.lib(exe_main.obj) : error LNK2019: unresolved external symbol __cexit referenced in 
function "int __cdecl __scrt_common_main_seh(void)" (?__scrt_common_main_seh@@YAHXZ)
1>msvcrt.lib(utility.obj) : error LNK2001: unresolved external symbol __cexit
1>msvcrt.lib(exe_main.obj) : error LNK2019: unresolved external symbol __c_exit referenced in 
function "int __cdecl __scrt_common_main_seh(void)" (?__scrt_common_main_seh@@YAHXZ)
1>msvcrt.lib(exe_main.obj) : error LNK2019: unresolved external symbol 
__register_thread_local_exe_atexit_callback referenced in function "int __cdecl 
__scrt_common_main_seh(void)" (?__scrt_common_main_seh@@YAHXZ)
1>msvcrt.lib(exe_main.obj) : error LNK2019: unresolved external symbol __configthreadlocale 
referenced in function "int __cdecl pre_c_initialization(void)" (?pre_c_initialization@@YAHXZ)
1>msvcrt.lib(exe_main.obj) : error LNK2019: unresolved external symbol __set_new_mode 
referenced in function "void __cdecl pre_cpp_initialization(void)" (? 
pre_cpp_initialization@@YAXXZ)
1>msvcrt.lib(exe_main.obj) : error LNK2019: unresolved external symbol ___p__commode 
referenced 
in function "int __cdecl pre_c_initialization(void)" (?pre_c_initialization@@YAHXZ)
1>msvcrt.lib(error.obj) : error LNK2019: unresolved external symbol _strcpy_s referenced in 
function "void __cdecl _RTC_StackFailure(void *,char const *)" (? 
_RTC_StackFailure@@YAXPAXPBD@Z)
1>msvcrt.lib(error.obj) : error LNK2019: unresolved external symbol _strcat_s referenced in 
function "void __cdecl _RTC_StackFailure(void *,char const *)" (? 
_RTC_StackFailure@@YAXPAXPBD@Z)
1>msvcrt.lib(error.obj) : error LNK2019: unresolved external symbol ___stdio_common_vsprintf_s 
referenced in function __vsprintf_s_l
1>msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __seh_filter_dll 
referenced in function ___scrt_dllmain_exception_filter
1>msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol 
__initialize_onexit_table 
referenced in function ___scrt_initialize_onexit_tables
1>msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol 
__register_onexit_function referenced in function __onexit
1>msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __execute_onexit_table 
referenced in function ___scrt_dllmain_uninitialize_c
1>msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __crt_atexit referenced 
in function __onexit
1>msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __crt_at_quick_exit 
referenced in function _at_quick_exit
1>msvcrt.lib(tncleanup.obj) : error LNK2019: unresolved external symbol 
___std_type_info_destroy_list referenced in function "void __cdecl 
__scrt_uninitialize_type_info(void)" (?__scrt_uninitialize_type_info@@YAXXZ)
1>msvcrt.lib(default_precision.obj) : error LNK2019: unresolved external symbol __controlfp_s 
referenced in function __initialize_default_precision
1>msvcrt.lib(utility_desktop.obj) : error LNK2019: unresolved external symbol _terminate 
referenced in function ___scrt_unhandled_exception_filter@4
1>msvcrt.lib(chandler4_noexcept.obj) : error LNK2001: unresolved external symbol _terminate
1>msvcrt.lib(utility_desktop.obj) : error LNK2019: unresolved external symbol 
___current_exception referenced in function ___scrt_unhandled_exception_filter@4
1>msvcrt.lib(chandler4_noexcept.obj) : error LNK2001: unresolved external symbol 
___current_exception
1>msvcrt.lib(utility_desktop.obj) : error LNK2019: unresolved external symbol 
___current_exception_context referenced in function ___scrt_unhandled_exception_filter@4
1>msvcrt.lib(chandler4_noexcept.obj) : error LNK2001: unresolved external symbol 
___current_exception_context
1>msvcrt.lib(utility_desktop.obj) : error LNK2019: unresolved external symbol _memset 
referenced in function ___scrt_fastfail
1>msvcrt.lib(chandler4gs.obj) : error LNK2019: unresolved external symbol 
__except_handler4_common referenced in function __except_handler4
1>msvcrt.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>msvcrt.lib(pdblkup.obj) : error LNK2019: unresolved external symbol ___vcrt_LoadLibraryExW 
referenced in function "struct HINSTANCE__ * __cdecl GetPdbDllFromInstallPath(void)" (? 
GetPdbDllFromInstallPath@@YAPAUHINSTANCE__@@XZ)



我也尝试将kernel32.libuser32.lib 添加到依赖项中,但它显示相同的错误。

【问题讨论】:

  • 你的代码是 C 还是 C++?
  • C 运行时支持库委托/依赖于平台库来工作。它需要使用平台库中的功能来完成它的工作。
  • 您是否使用/MT or /MD?您告诉链接器忽略默认库 (/NODEFAULTLIB) 并改为链接 msvcrt.lib,这是 CRT 的 DLL 版本的导入库。 1,要么删除/NODEFAULTLIB,删除`msvcrt.lib`,让编译器/链接器完成这项工作。 2、或者把msvcrt[d].lib改成libcmt[d].lib

标签: c++ c visual-studio


【解决方案1】:

您可以在 VS 中为 C 和 C++ 使用 C++ 项目。它将理解这两种类型的代码。只需将源文件保存为 .c 并将头文件保存为 .h 而不是 .cpp 或 .hpp。 VS 2019 会自动调整和编译两者。

【讨论】:

    猜你喜欢
    • 2019-10-22
    • 2021-06-16
    • 2019-11-27
    • 1970-01-01
    • 2018-05-14
    • 2022-01-16
    • 1970-01-01
    • 2017-10-20
    • 2021-05-11
    相关资源
    最近更新 更多