网站建设项目需求概要说明书,网站集约化建设调研报告,高端网站建设公司成都,网站建设费用说明LNK2001: unresolved external symbol __imp___std_init_once_begin_initialize 解决 文章目录 问题背景方法一#xff1a;使用预编译指令方法二#xff1a;使用相同的环境 参考链接附录 问题背景 Visual Studio 2019 对 CMakeLists.txt 的支持不是很好#xff0c;使用 “文… LNK2001: unresolved external symbol __imp___std_init_once_begin_initialize 解决 文章目录 问题背景方法一使用预编译指令方法二使用相同的环境 参考链接附录 问题背景 Visual Studio 2019 对 CMakeLists.txt 的支持不是很好使用 “文件 (File)” → “打开 (Open)” → “CMake…” 方式打开工程代码 链接同样使用 Visual Studio 2019 生成的静态库时出现了这个问题
LNK2001: unresolved external symbol __imp___std_init_once_begin_initialize
LNK2001: unresolved external symbol __imp___std_init_once_complete一般出现 unresolved external symbol 无法解析的外部符号表示编译器没有找到函数的实现也就是函数体。
方法一使用预编译指令 在 Visual Studio 开发者社区看到一个帖子是这样说的 Some functions in msvcprt.lib have been renamed at some point, and the linker is supposed to do the necessary redirection automatically for you. However, I assume that the redirection is not correctly seen by the linker anymore and thus not applied. You can add the necessary code anywhere in your own though. 在 msvcprt.lib 库中的一些函数在某次迭代更新后被重命名链接器应该会自动执行必要的重定向。但是实际情况是链接器并未找到正确的指令因此未进行正确的重定向。不过你可以在自己的代码中合适的位置添加如下必要的代码。
#if _MSC_VER 1932
#pragma comment(linker, /alternatename:__imp___std_init_once_complete__imp_InitOnceComplete)
#pragma comment(linker, /alternatename:__imp___std_init_once_begin_initialize__imp_InitOnceBeginInitialize)
#endif注关于 _MSC_VER 的版本对应问题见文章附录 我们使用 Visual Studio 的开发人员命令提示工具查看 msvcprt.lib 库的预处理指令 dumpbin /directives
dumpbin /directives “C\Program FilesMicrosoft Visual Studio\2022\Enterprise\VC\Tools\MSVC14.32.31326\libx64\msvcprt.lib”能看到 类似如下内容
-----------------
/ALTERNATENAME:__imp___std_init_once_begin_initialize__imp_InitOnceBeginInitialize
/ALTERNATENAME:__imp___std_init_once_complete__imp_InitOnceComplete这是应该自动转发到链接器的内容出于某种原因未成功。目前这种方法是处理 Visual Studio 2022 初期版本的问题后续的版本应该是修复了。
方法二使用相同的环境 本人这里遇到的问题原因是两个 Visual Studio 的版本不一致也就是编译静态库的开发环境和使用静态库的开发环境不一致虽然都是 2019但一个是 16.0.0 另一个是较新的版本额外还安装了 Visual Studio 2022
然后使用同一版本的 Visual Studio 2019就不再有此种链接问题。
参考链接 https://developercommunity.visualstudio.com/t/-imp-std-init-once-complete-unresolved-external-sy/1684365
https://learn.microsoft.com/en-us/cpp/preprocessor/predefined-macros
附录 Visual Studio 版本与 _MSC_VER 对应表
Visual Studio 版本_MSC_VERVisual Studio 6.01200Visual Studio .NET 2002 (7.0)1300Visual Studio .NET 2003 (7.1)1310Visual Studio 2005 (8.0)1400Visual Studio 2008 (9.0)1500Visual Studio 2010 (10.0)1600Visual Studio 2012 (11.0)1700Visual Studio 2013 (12.0)1800Visual Studio 2015 (14.0)1900Visual Studio 2017 RTW (15.0)1910Visual Studio 2017 version 15.31911Visual Studio 2017 version 15.51912Visual Studio 2017 version 15.61913Visual Studio 2017 version 15.71914Visual Studio 2017 version 15.81915Visual Studio 2017 version 15.91916Visual Studio 2019 RTW (16.0)1920Visual Studio 2019 version 16.11921Visual Studio 2019 version 16.21922Visual Studio 2019 version 16.31923Visual Studio 2019 version 16.41924Visual Studio 2019 version 16.51925Visual Studio 2019 version 16.61926Visual Studio 2019 version 16.71927Visual Studio 2019 version 16.8, 16.91928Visual Studio 2019 version 16.10, 16.111929Visual Studio 2022 RTW (17.0)1930Visual Studio 2022 version 17.11931Visual Studio 2022 version 17.21932Visual Studio 2022 version 17.31933Visual Studio 2022 version 17.41934Visual Studio 2022 version 17.51935