MSVC2019编译C++程序遇LNK2019等错误求解决
编译大型C++程序遇到的链接错误及库依赖问题
我尝试在MSVC 2019中编译一个大型C++程序,始终遇到编译错误,谷歌和Stack Overflow上没找到解决方案。推测是依赖问题而非代码问题,暂未附上项目代码,若需要可提供所用头文件。
使用cl64.exe编译时的错误
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29910\include\ostream(534): warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29910\include\ostream(527): note: while compiling class template member function 'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::write(const _Elem *,std::streamsize)' with [ _Elem=char ] C:\Users\User\Desktop\test.h(72): note: see reference to function template instantiation 'std::basic_ostream<char,std::char_traits<char>> &std::basic_ostream<char,std::char_traits<char>>::write(const _Elem *,std::streamsize)' being compiled with [ _Elem=char ] C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29910\include\istream(711): note: see reference to class template instantiation 'std::basic_ostream<char,std::char_traits<char>>' being compiled C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29910\include\sstream(515): note: see reference to class template instantiation 'std::basic_iostream<char,std::char_traits<char>>' being compiled C:\Users\User\Desktop\test.h(66): note: see reference to class template instantiation 'std::basic_stringstream<char,std::char_traits<char>,std::allocator<char>>' being compiled libcmt.lib(utility.obj) : error LNK2019: unresolved external symbol _is_c_termination_complete referenced in function __scrt_dllmain_uninitialize_c libcmt.lib(utility.obj) : error LNK2019: unresolved external symbol __acrt_initialize referenced in function __scrt_initialize_crt libcmt.lib(utility.obj) : error LNK2019: unresolved external symbol __acrt_uninitialize referenced in function __scrt_uninitialize_crt libcmt.lib(utility.obj) : error LNK2019: unresolved external symbol __acrt_uninitialize_critical referenced in function __scrt_dllmain_uninitialize_critical libcmt.lib(utility.obj) : error LNK2019: unresolved external symbol __acrt_thread_attach referenced in function __scrt_dllmain_crt_thread_attach libcmt.lib(utility.obj) : error LNK2019: unresolved external symbol __acrt_thread_detach referenced in function __scrt_dllmain_crt_thread_detach
在MSVC内部编译时的错误
Error LNK2019 unresolved external symbol URLOpenBlockingStreamA referenced in function "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl downloadResource(char *)" (?downloadResource@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PEAD@Z) test C:\Users\User\Desktop\test.obj
解决方案及所需库
针对cl64.exe的链接错误
- 处理警告C4530:编译时添加
/EHsc参数,启用C++异常处理的unwind语义。 - 解决
__acrt_*系列未定义符号:这是C运行时库(CRT)链接版本不匹配导致的。确保编译时使用一致的CRT版本:- 若使用静态CRT,确认已正确链接
libcmt.lib和vcruntime.lib; - 或切换到动态CRT,编译时添加
/MD参数,避免静态库冲突。
- 若使用静态CRT,确认已正确链接
针对URLOpenBlockingStreamA的链接错误
URLOpenBlockingStreamA属于Windows URL Moniker服务,需要链接urlmon.lib库:- 命令行编译时,将
urlmon.lib作为链接输入参数添加; - Visual Studio项目中,进入「链接器」→「输入」→「附加依赖项」,添加
urlmon.lib。
- 命令行编译时,将
内容的提问来源于stack exchange,提问作者priyatheprincess
相关产品推荐
相关产品推荐

