我以前用于编译Linux,所以这个.lib的东西对我来说有点奇怪。使用Visual Studio下的程序,我不断为其他库甚至Microsoft Runtimes获取随机未解析的外部符号。
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
我可以确认这是确切的顺序。我尝试过安装和重新安装Windows 7 SDK和Visual Studio - 我也在Windows 7上。
对此问题的任何帮助将不胜感激,如果需要,我很乐意提供更多信息。
谢谢,Boncey
答案 0 :(得分:18)
您还可以在链接器输入中添加一个额外的库,即legacy_stdio_definitions.lib
转到“属性”>链接器>输入
在Additional Dependencies中添加上面提到的库。
答案 1 :(得分:9)
问题是你的glfw静态库是使用与你正在使用的不同版本的Visual Studio构建的。截至2015年春季,glfw.org上的预构建版本与Visual Studio 2015 RC(您似乎正在使用)不兼容。
幸运的是,GLFW是一个在许可许可下发布的小代码库,因此最简单的解决方案就是在您的解决方案中为它创建一个新项目。步骤将是这样的:
include
,deps/GL
,然后创建一个src
文件夹。src
文件夹中。对于Windows,这是具有win
或wgl
前缀或没有前缀的所有内容。你可以忽略所有的cmake东西。src
的{{1}}中创建一个包含glfw_config.h
#defines
,_GLFW_WIN32
和_GLFW_WGL
_GLFW_USE_OPENGL
的文件。如果您不仅仅支持Windows,那么您必须在此文件中有条件地定义所需的选项。 src/glfw_config.h.in
。_GLFW_USE_CONFIG_H
添加到定义中。$(SolutionDir)GLFW\$(Platform)\$(Configuration)\glfw.lib
。)答案 2 :(得分:0)
看起来动态和静态运行时库链接之间存在错误连接。符号上的“__imp”前缀表示您的代码正在从DLL中查找某些内容,但您链接的库可能需要静态运行时库。
打开项目属性页面(在Build-> Properties下),并在左侧查找C ++类别。在“代码生成”下,应该有一个名为“运行时库”的条目。这可能目前设置为多线程调试DLL(/ MDd),因为它看起来像是在调试模式下编译。将其更改为多线程调试(/ MTd),并重新编译所有内容。看看现在是否有效。