C++ c++;:如何查找包含缺少外部符号的标准库?

C++ c++;:如何查找包含缺少外部符号的标准库?,c++,visual-c++,visual-studio-2015,external,symbols,C++,Visual C++,Visual Studio 2015,External,Symbols,我正在VS2015中构建一个使用第三方库的项目。我使用的第三方库应该是VS2015(x64)兼容的,所以它应该与我的项目兼容。我的项目设置还将“忽略默认库”设置为否 除了我最后得到的一个链接器错误外,我发现的所有内容都是由第三方库引起的: LNK2001 unresolved external symbol "__declspec(dllimport) char const * __cdecl std::_Winerror_map(int)" (__imp_?_Winerror_map@std@

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

除了我最后得到的一个链接器错误外,我发现的所有内容都是由第三方库引起的:

LNK2001 unresolved external symbol "__declspec(dllimport) char const * __cdecl std::_Winerror_map(int)" (__imp_?_Winerror_map@std@@YAPEBDH@Z)
我不知道这个“\u Winerror\u 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)

这些给编译过程带来了许多复杂性,微软已经尝试使用pragma来解决这些问题

 #if defined( _DEBUG )
 #   pragma comment ( lib, "steves_debug.lib") 
 #else
 #   pragma comment ( lib, "steves_release.lib" )
 #endif
注释(lib
描述添加到
.obj
的信息,以确保正确的库自动添加到link命令

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


MSVC运行时DLL通常由supply/MT[d]/MD[d]拉入在编译阶段。

似乎有MS工具可供使用:通常无法确定应该包含哪些库。通常的方法是搜索内部文档。接下来搜索源代码并尝试找到所需的头文件导入函数,然后将其与正确的库关联。您还可以尝试使用依赖于OS的工具,但在极端情况下(比如你在机器上没有LIB),你无法确定需要链接什么链接。确保你正在构建C++应用程序(而不是C应用程序),并且你链接到运行库(MD选项)的DLL版本。未定义的符号在标准微软C++运行库导入库中定义,所有C++应用程序通常都与之链接。