随机未解析的外部符号不应该存在

Bon*_*cey 11 c++ windows linker symbols visual-studio

我习惯为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'
Run Code Online (Sandbox Code Playgroud)

我只包括这些库,我可以确认它们被发现:

x86/glew32s.lib
x86/glfw3.lib
x86/glfw3dll.lib
opengl32.lib
Run Code Online (Sandbox Code Playgroud)

凭借其继承的价值观:

kernel32.lib
user32.lib
gdi32.lib
winspool.lib
comdlg32.lib
Run Code Online (Sandbox Code Playgroud)

我可以确认这是确切的顺序.我已经尝试安装并重新安装Windows 7 SDK和Visual Studio - 我也在Windows 7上.

任何有关此问题的帮助将不胜感激,如果需要,我很乐意提供更多信息.

谢谢,Boncey

Gur*_*tti 18

您还可以向链接器输入添加其他库,即 legacy_stdio_definitions.lib

转到属性>链接器>输入.

在Additional Dependencies中添加上面提到的库.


Dan*_*Dan 9

问题是你的glfw静态库是使用与你正在使用的不同版本的Visual Studio构建的.截至2015年春季,glfw.org上的预构建版本与Visual Studio 2015 RC(您似乎正在使用)不兼容.

幸运的是,GLFW是一个在许可许可下发布的小代码库,因此最简单的解决方案就是在您的解决方案中为它创建一个新项目.步骤将是这样的:

  1. 在解决方案中创建一个新的空项目GLFW.
  2. 复制的include,deps/GL以及创建一个src文件夹.
  3. 将所有源文件复制到src您要支持的平台的文件夹中.对于Windows,这是带有winwgl前缀或没有前缀的所有内容.你可以忽略所有的cmake东西.
  4. 创建一个文件src名为glfw_config.h包含#defines_GLFW_WIN32,_GLFW_WGL_GLFW_USE_OPENGL.如果您不仅仅支持Windows,则必须有条件地在此文件中定义所需的选项.所有选项都在描述中src/glfw_config.h.in.
  5. 将所有相关文件添加到Visual Studio项目.
  6. 在项目选项中,将Configuration Type设置为static lib.在C/C++> General下,确保禁用SDL检查.在预处理器下,添加_GLFW_USE_CONFIG_H到定义中.
  7. 将主项目设置为依赖于GLFW项目(在右键单击菜单中).最后,将正确的GLFW lib添加到链接器依赖项中.(我有GLFW设置的输出目录,所以正确的lib就是$(SolutionDir)GLFW\$(Platform)\$(Configuration)\glfw.lib.)