我习惯于编译Linux,所以这个.lib的东西对我来说有点奇怪。 随着Visual Studio下我的程序,我不断得到其他库,甚至微软运行时的无法parsing的外部符号。
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
凭借其inheritance的价值:
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib
我可以确认这是确切的顺序。 我已经尝试安装和重新安装Windows 7 SDK和Visual Studio – 我也在Windows 7上。
任何关于这个问题的帮助将不胜感激,如果需要,我很乐意提供更多信息。
谢谢,Boncey
问题是你的glfw静态库是用不同于你正在使用的Visual Studio版本构建的。 截至2015年春季,glfw.org上的预编译版本与Visual Studio 2015 RC(您似乎正在使用)不兼容。
幸运的是,GLFW是一个在许可证下发布的小型代码库,所以最简单的解决方案就是在你的解决方案中为它创建一个新的项目。 步骤将如下所示:
include
, deps/GL
复制,然后创建一个src
文件夹。 src
文件夹中。 对于windows而言,这是所有带有win
或wgl
前缀的地方,或者没有前缀。 你可以忽略所有cmake的东西。 src
创建一个名为glfw_config.h
的文件,其中包含_GLFW_WIN32
, _GLFW_WGL
和_GLFW_USE_OPENGL
#defines
。 如果你想支持的不仅仅是windows,你将不得不有条件地在这个文件中定义你想要的选项。 所有选项在src/glfw_config.h.in
都有描述。 _GLFW_USE_CONFIG_H
添加到定义中。 $(SolutionDir)GLFW\$(Platform)\$(Configuration)\glfw.lib
。) 你也可以添加一个额外的库到你的链接器输入,即legacy_stdio_definitions.lib
进入“属性”>“链接器”>“输入”。
在其他依赖项中添加上面提到的库。
它看起来像动态和静态运行时库链接之间有一个错误的连接。 符号上的“__imp”前缀表示代码正在从DLL中寻找某些东西,但链接的库可能需要静态运行时库。
调出项目属性页面(在Build-> Properties下),并在左边查找C ++类别。 在“代码生成”下,应该有一个名为“运行时库”的条目。 这可能是目前设置为多线程调试DLL(/ MDd),因为它看起来像你正在编译调试模式。 将其更改为多线程调试(/ MTd),并重新编译所有内容。 看看现在是否有效。