gpt4 book ai didi

c++:如何找到哪个标准库包含丢失的外部符号?

转载 作者:太空狗 更新时间:2023-10-29 23:12:41 28 4
gpt4 key购买 nike

我正在 VS2015 中构建一个使用第 3 方库的项目。我正在使用的第 3 方库应该与 VS2015 (x64) 兼容,因此它应该与我的项目兼容。我的项目设置也将“忽略默认库”设置为“否”。

除了我最后得到的链接器错误外,所有内容都可以找到,这是由第 3 方库引起的:

LNK2001 unresolved external symbol "__declspec(dllimport) char const * __cdecl std::_Winerror_map(int)" (__imp_?_Winerror_map@std@@YAPEBDH@Z)

我不知道这个“_Winerror_map”函数包含在哪个.lib中,但我设法找到了源代码位置:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\crt\src\stl\sysError.cpp

我尝试简单地将该文件包含在我的项目中,但出现以下错误:

Error   C2491   'std::_Winerror_map': definition of dllimport function not allowed

如何确定此源文件包含在哪个默认库中?

最佳答案

在 Windows 上构建时,有许多不同的构建风格(例如 dll 与静态)和构建类型(调试与发布)和平台(x86、x64)。

这给编译过程带来了一些复杂性,Microsoft 已尝试使用 pragma 来解决这个问题

 #if defined( _DEBUG )
# pragma comment ( lib, "steves_debug.lib")
#else
# pragma comment ( lib, "steves_release.lib" )
#endif

注释 (lib 描述了添加到 .obj 的信息,以确保正确的库自动添加到链接命令。

这可以通过链接 /nodefaultlib 来覆盖。这是一个坏主意,因为其中一些变体依赖于在 maindllMain 之前运行的代码来确保它们不会泄漏。

MSVC 运行时 dll 通常在编译阶段由供应/MT[d]/MD[d] 引入。 MSDN : /MT /MD

关于c++:如何找到哪个标准库包含丢失的外部符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44296562/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com