【发布时间】:2017-11-01 22:54:34
【问题描述】:
我正在 VS2015 中构建一个使用 3rd 方库的项目。我使用的第 3 方库应该是 VS2015 (x64) 兼容的,所以它应该与我的项目兼容。我的项目设置也将“忽略默认库”设置为 NO。
除了我最后得到的链接器错误之外,所有的构建都找到了,这是由 3rd 方库引起的:
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
如何确定此源文件包含在哪个默认库中?
【问题讨论】:
-
貌似有 MS 工具可以解决它:stackoverflow.com/questions/437432/…
-
通常没有办法告诉你应该包含什么库。正常的方法是搜索内部文档。接下来搜索源代码并尝试找到导入所需函数的头文件,然后将其与正确的库相关联。您也可以尝试使用依赖于操作系统的工具在所有库中搜索,但在极端情况下(例如您的机器上没有库),无法确定您需要链接哪个库。
-
确保您正在构建 C++ 应用程序(而不是 C 应用程序)并且您正在链接运行时库的 DLL 版本(/MD 选项)。您的未定义符号在所有 C++ 应用程序通常链接的标准 Microsoft C++ 运行时导入库中定义。
标签: c++ visual-c++ visual-studio-2015 external symbols