我正在VS2015中构建一个使用第三方库的项目。我正在使用的第三方库应该与VS2015(x64)兼容,因此它应该与我的项目兼容。我的项目设置还将“忽略默认库”设置为NO。
除了链接器错误之外,所有内容都会构建查找,最后由第三方库引起:
LNK2001 unresolved external symbol "__declspec(dllimport) char const * __cdecl std::_Winerror_map(int)" (__imp_?_Winerror_map@std@@YAPEBDH@Z)
我不知道哪个.lib包含了这个“_Winerror_map”函数,但是我设法找到了源代码的位置:
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
如何确定此源文件包含在哪个默认lib中?
答案 0 :(得分:0)
在Windows上构建时,有许多不同的构建版本(例如dll vs static)和构建类型(debug vs release)和平台(x86,x64)。
这些为编译过程带来了许多复杂性,微软试图使用编译指示来解决这个问题
#if defined( _DEBUG )
# pragma comment ( lib, "steves_debug.lib")
#else
# pragma comment ( lib, "steves_release.lib" )
#endif
comment (lib
描述了添加到.obj
的信息,以确保将正确的库自动添加到链接命令中。
可以通过与/nodefaultlib
关联来覆盖此内容。这是一个坏主意,因为其中一些变体依赖于在main
或dllMain
之前运行的代码,以确保它们没有泄漏。
在编译阶段,MSVC运行时dll通常由supply / MT [d] / MD [d]引入。https://stackoverflow.com/a/5883909/1701316