Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 不应使用的随机未解析外部符号';我不在那里_C++_Windows_Visual Studio_Linker_Symbols - Fatal编程技术网

C++ 不应使用的随机未解析外部符号';我不在那里

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

我习惯于为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) : 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是在许可证下发布的一个小代码库,所以最简单的解决方案就是在您的解决方案中为它创建一个新项目。步骤如下所示:

  • 在解决方案中创建新的空项目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.中描述
  • 将所有相关文件添加到Visual Studio项目
  • 在项目选项中,将配置类型设置为静态库。在C/C++>General下,确保禁用SDL检查。在预处理器下,将
    \u GLFW\u USE\u CONFIG\u H
    添加到定义中
  • 将主项目设置为依赖于GLFW项目(在右键单击菜单中)。最后,将正确的GLFW库添加到链接器依赖项中。(我已设置GLFW的输出目录,因此正确的库仅为
    $(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网站上提供。