c++ - 哪个库包含 _is_c_termination_complete

标签 c++ visual-studio-2017 lnk2019

我在将 C++ 代码与标准库 C++ 库链接时收到 LNK2019 错误。我需要知道哪些库包含函数:

  • is_c_termination_complete,
  • __acrt_initialize,
  • __acrt_uninitialize,
  • __acrt_uninitialize_critical,
  • __acrt_thread_attach,
  • __acrt_thread_detach

将其包含在链接过程中。

我正在使用 MS Visual Studio community 2017 和 Intel Parallel studio xe 2019 update 1 用 C++ 编写代码,以便集成到第 3 方软件中。第 3 方软件提供了一个“make”选项来编译目标文件并将它们链接在一起。

编译工作正常,链接提供了一个问题。

第 3 方软件提供了一个条目,以变量的形式提供基本的链接器选项。默认选项如下:

link_sl='LINK', '/nologo', '/NOENTRY', '/INCREMENTAL:NO', '/subsystem:console', '/machine:AMD64', 
' /NODEFAULTLIB:LIBC.LIB', '/NODEFAULTLIB:LIBCMT.LIB','/DEFAULTLIB:OLDNAMES.LIB', '/DEFAULTLIB:LIBIFCOREMD.LIB', '/DEFAULTLIB:LIBIFPORTMD.LIB', '/DEFAULTLIB:LIBMMD.LIB', '/DEFAULTLIB:kernel32.lib', '/DEFAULTLIB:user32.lib', '/DEFAULTLIB:advapi32.lib','/FIXED:NO', '/dll','/def:%E', '/out:%U', '%F', '%A', '%L', '%B', 
'oldnames.lib', 'user32.lib', 'ws2_32.lib', 'netapi32.lib','advapi32.lib', 
'msvcrt.lib', 'vcruntime.lib', 'ucrt.lib']

链接时出现以下 11 个错误:

msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __vcrt_initialize referenced in function __scrt_initialize_crt
msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __vcrt_uninitialize referenced in function __scrt_initialize_crt
msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __vcrt_uninitialize_critical referenced in function __scrt_dllmain_uninitialize_critical
msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __vcrt_thread_attach referenced in function __scrt_dllmain_crt_thread_attach
msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __vcrt_thread_detach referenced in function __scrt_dllmain_crt_thread_attach
msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol _is_c_termination_complete referenced in function __scrt_dllmain_uninitialize_c
msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __acrt_initialize referenced in function __scrt_initialize_crt
msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __acrt_uninitialize referenced in function __scrt_uninitialize_crt
msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __acrt_uninitialize_critical referenced in function __scrt_dllmain_uninitialize_critical
msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __acrt_thread_attach referenced in function __scrt_dllmain_crt_thread_attach
msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __acrt_thread_detach referenced in function __scrt_dllmain_crt_thread_detach

这基本上意味着我没有包括所有必要的库。 我已经发现在选项中包含库“libvcruntime.lib”可将错误减少到 6 个。因此,使用:

link_sl='LINK', '/nologo', '/NOENTRY', '/INCREMENTAL:NO', '/subsystem:console', '/machine:AMD64', 
' /NODEFAULTLIB:LIBC.LIB', '/NODEFAULTLIB:LIBCMT.LIB','/DEFAULTLIB:OLDNAMES.LIB', '/DEFAULTLIB:LIBIFCOREMD.LIB', '/DEFAULTLIB:LIBIFPORTMD.LIB', '/DEFAULTLIB:LIBMMD.LIB', '/DEFAULTLIB:kernel32.lib', '/DEFAULTLIB:user32.lib', '/DEFAULTLIB:advapi32.lib','/FIXED:NO', '/dll','/def:%E', '/out:%U', '%F', '%A', '%L', '%B', 
'oldnames.lib', 'user32.lib', 'ws2_32.lib', 'netapi32.lib','advapi32.lib', 
'msvcrt.lib', 'vcruntime.lib', 'ucrt.lib',**'libvcruntime.lib'**]

结果:

msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol _is_c_termination_complete referenced in function __scrt_dllmain_uninitialize_c
msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __acrt_initialize referenced in function __scrt_initialize_crt
msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __acrt_uninitialize referenced in function __scrt_uninitialize_crt
msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __acrt_uninitialize_critical referenced in function __scrt_dllmain_uninitialize_critical
msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __acrt_thread_attach referenced in function __scrt_dllmain_crt_thread_attach
msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __acrt_thread_detach referenced in function __scrt_dllmain_crt_thread_detach

我需要在链接过程中包含哪些其他库才能解决这些问题?

最佳答案

在这个第 3 方软件提供的框架内工作时,我遇到了完全相同的问题。虽然我无法直接回答查找包含 _is_c_termination_complete 的库的问题,但我意识到仍然可以使您的代码正常工作:只需将 /FORCE 标志添加到您的 link_sl 标志列表。

根据 MSVC official documentation :

The /FORCE option tells the linker to create a valid .exe file or DLL even if a symbol is referenced but not defined or is multiply defined.

因此,LNK2019 错误消息不会阻止链接器生成 dll 库,这对于第 3 方软件的运行至关重要。链接器消息如下所示:

msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol _is_c_termination_complete referenced in function __scrt_dllmain_uninitialize_c
msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __acrt_initialize referenced in function __scrt_initialize_crt
msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __acrt_uninitialize referenced in function __scrt_uninitialize_crt
msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __acrt_uninitialize_critical referenced in function __scrt_dllmain_uninitialize_critical
msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __acrt_thread_attach referenced in function __scrt_dllmain_crt_thread_attach
msvcrt.lib(utility.obj) : error LNK2019: unresolved external symbol __acrt_thread_detach referenced in function __scrt_dllmain_crt_thread_detach
 : warning LNK4088: image being generated due to /FORCE option; image may not run
msvcprt.lib(locale0_implib.obj) : warning LNK4210: .CRT section exists; there may be unhandled static initializers or terminators

这当然不是一个倾倒的解决方案,不能保证在任何情况下都有效,但它至少适用于我的代码。

关于c++ - 哪个库包含 _is_c_termination_complete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54124505/

相关文章:

c# - VS2017 - C#7 语言功能在 MVC View 中不起作用

c++ - C++错误LNK2019 : unresolved external symbol _main referenced in function _tmainCRTStartup

c++ - 尝试使用模板扩展类时出现链接错误(LINK 2019)

c++ - VC++ 与 GCC 预处理器

javascript - 在 Visual Studio 2017 中调试 node.js 项目时如何传递参数?

c++ - 如何在 C++ Builder 中直观地设计组件?

c# - 将 SQL Server 2012 指定为目标平台的项目可能会遇到与 Microsoft Azure SQL 数据库 v12 的兼容性问题

c++ - 添加引用项目 Blank Visual Studio 2013

c++ - 定义自己的异常类的最佳实践?

c++ - 如何对非类型参数包的元素执行算术运算?