C++ 不应使用的随机未解析外部符号';我不在那里
我习惯于为Linux编译,所以这个.lib的东西对我来说有点奇怪。在VisualStudio下的程序中,我不断得到其他LIB甚至Microsoft运行时的随机未解析外部符号C++ 不应使用的随机未解析外部符号';我不在那里,c++,windows,visual-studio,linker,symbols,C++,Windows,Visual Studio,Linker,Symbols,我习惯于为Linux编译,所以这个.lib的东西对我来说有点奇怪。在VisualStudio下的程序中,我不断得到其他LIB甚至Microsoft运行时的随机未解析外部符号 1>glfw3.lib(init.c.obj) : error LNK2019: unresolved external symbol __imp__vsnprintf referenced in function __glfwInputError 1>MSVCRTD.lib(vsnprintf.obj) : e
1>glfw3.lib(init.c.obj) : error LNK2019: unresolved external symbol __imp__vsnprintf referenced in function __glfwInputError
1>MSVCRTD.lib(vsnprintf.obj) : error LNK2001: unresolved external symbol __imp__vsnprintf
1>glfw3.lib(context.c.obj) : error LNK2019: unresolved external symbol __imp__sscanf referenced in function _parseVersionString
1>MSVCRTD.lib(vsnprintf.obj) : error LNK2001: unresolved external symbol __imp___vsnprintf
1>C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\lib\OLDNAMES.lib : warning LNK4272: library machine type 'UNKNOWN' conflicts with target machine type 'X86'
我只包括这些库,我可以确认它们正在被找到:
x86/glew32s.lib
x86/glfw3.lib
x86/glfw3dll.lib
opengl32.lib
使用其继承的值:
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
我可以确认这是确切的订单。我尝试过安装和重新安装Windows7SDK和VisualStudio,我也在Windows7上
任何关于这个问题的帮助都将不胜感激,如果需要,我很乐意提供更多信息
谢谢,Boncey看起来动态和静态运行库链接之间存在错误连接。符号上的“_imp”前缀意味着您的代码正在从DLL中查找某些内容,但您正在链接的库可能需要静态运行时库
生成Project属性页(在Buff->属性下),并在左侧查找C++类。在“代码生成”下应该有一个名为“运行时库”的条目。这可能是当前设置为多线程调试DLL(/MDd),因为它看起来像是在调试模式下编译的。将此更改为多线程调试(/MTd),然后重新编译所有内容。看看现在是否有效。
问题在于,glfw静态库是使用与您正在使用的Visual Studio版本不同的版本构建的。截至2015年春季,glfw.org上的预构建版本与Visual Studio 2015 RC(您似乎正在使用)不兼容 幸运的是,GLFW是在许可证下发布的一个小代码库,所以最简单的解决方案就是在您的解决方案中为它创建一个新项目。步骤如下所示:include
,deps/GL
中复制,并创建src
文件夹src
文件夹中。对于windows,这是带有win
或wgl
前缀或无前缀的所有内容。你可以忽略所有cmake的东西src
中创建一个名为glfw_config.h
的文件,其中包含#定义\u glfw_WIN32
、\u glfw_WGL
和\u glfw_USE\u OPENGL
。如果您希望支持的不仅仅是windows,那么您必须有条件地定义此文件中所需的选项。所有选项都在
中的src/glfw_config.h.中描述\u GLFW\u USE\u CONFIG\u H
添加到定义中$(SolutionDir)GLFW\$(平台)\$(配置)\GLFW.lib
)您还可以向链接器输入中添加一个附加库,即
legacy\u stdio\u definitions.lib
转到属性>链接器>输入
在其他依赖项中添加上述库。显然,这不是查找库的问题,而是不匹配的体系结构(尽管
UNKNOWN
在这里所做的有点令人费解…)。不知道,我不知道OLDNAMES.lib做了什么,而且我也没有包括它s@JBL我不太确定;32位glfw+32位MSVCRT.lib与64位glfw+64位MSVCRT.lib的错误相同。这并没有解决任何问题。事实上,这可能是正确的答案。VS是否可以找到要使用的.LIB或是否需要.DLL来解析这些函数似乎取决于VS(或哪个版本)的安装方式。更改工具集可能会有所帮助,但马克的答案最有可能。因为有点不清楚到底要添加什么,所以“附加依赖项”字段是一个以分号分隔的路径列表。似乎只是简单地添加;legacy_stdio_definitions.lib应足够了。我不知道该文件在磁盘上的什么位置,但VS能够找到它。您也可以通过#pragma comment(lib,“legacy#stdio_definitions.lib”)更新2/2017在.cpp文件中引用该文件-vs2015二进制文件现已在glfw网站上提供。