C ++ GLFW通过添加legacy_stdio_definitions.lib解决了错误。为什么?

时间:2016-12-28 17:44:17

标签: c++ opengl glfw

有人可以向我解释为什么在构建以下程序时添加“legacy_stdio_definitions.lib”会解决错误吗? 我尝试使用GLFW库时发生错误。 我仍然是c ++和OpenGL世界的新手,经过数小时的在线搜索和数小时的试验和错误,我偶然发现了将“legacy_stdio_definitions.lib”添加到我的其他依赖项的建议。这确实解决了错误但我仍然不完全理解问题是什么以及.lib解决它的问题。

我正在使用Microsoft Visual Studio 2015社区版btw。

我所做的所有步骤都是:

  1. C / C ++ - > glew,glm和glfw
  2. 的一般添加包括
  3. Linker->一般添加glew和glfw libs
  4. 链接器 - >已添加输入 glew32.lib,glfw3.lib和legacy_stdio_definitions.lib
  5. 将glew32.dll添加到我的项目文件夹
  6. var fiftyplanets = [{
        "Hostname": "11 Com",
        "Distance [pc]": 110.62,
        "Effective Temperature [K]": 4742,
        "Date of Last Update": "5/14/2014"
    }];
    
    function findDistance(hostname) {
        function search(am, im) {
            if (am.Hostname === hostname) {
                index = im;
                return true;
            }
        }
    
        var index;
        if (fiftyplanets.some(search)) {
            return fiftyplanets[index]['Distance [pc]'];
        }
    }
    
    function findTemp(hostname) {
        function search(am, im) {
            if (am.Hostname === hostname) {
                index = im;
                return true;
            }
        }
    
        var index;
        if (fiftyplanets.some(search)) {
            return fiftyplanets[index]['Effective Temperature [K]'];
        }
    }
    
    var name = value;
    var resullt = fiftyplanets.indexOf(name);
    var dist = findDistance(name);
    var temp = findTemp(name);
    

    任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

Microsoft在Visual Studio 2015中制作了several changes,可能会破坏现有的代码库。根据您对问题的描述,以下是可能的罪魁祸首。引自here

  

所有printf和scanf函数的定义都已内联移入stdio.h,conio.h和其他CRT头文件中。这是一个重大更改,导致链接器错误(LNK2019,未解析的外部符号),用于在本地声明这些函数而不包含相应CRT头的任何程序。如果可能,您应该更新代码以包含CRT标头(即添加#include stdio.h)和内联函数,但如果您不想修改代码以包含这些头文件,则另一种解决方案是在链接器输入中添加一个额外的库,legacy_stdio_definitions.lib。

GLFW必须在本地定义这些功能,而不包括CRT标头。