如何解决此编译错误

How to resolve this compilation error

本文关键字:编译 错误 解决 何解决      更新时间:2023-10-16

我试图编译一些OpenGl代码,因为我得到这个错误

1>c:usersstudentdocumentsvisual studio 2012projectsopenglproject1openglproject1initshader.h(10): error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 程序是

#include "Angel.h"
namespace Angel {
// Create a NULL-terminated string by reading the provided file
static char*
readShaderSource(const char* shaderFile)
{
    FILE* fp = fopen(shaderFile, "r");
    if ( fp == NULL ) { return NULL; }
    fseek(fp, 0L, SEEK_END);
    long size = ftell(fp);
    fseek(fp, 0L, SEEK_SET);
    char* buf = new char[size + 1];
    fread(buf, 1, size, fp);
    buf[size] = '';
    fclose(fp);
    return buf;
}

// Create a GLSL program object from vertex and fragment shader files
GLuint
InitShader(const char* vShaderFile, const char* fShaderFile)
{
    struct Shader {
    const char*  filename;
    GLenum       type;
    GLchar*      source;
    }  shaders[2] = {
    { vShaderFile, GL_VERTEX_SHADER, NULL },
    { fShaderFile, GL_FRAGMENT_SHADER, NULL }
    };
    GLuint program = glCreateProgram();

    for ( int i = 0; i < 2; ++i ) {
    Shader& s = shaders[i];
    s.source = readShaderSource( s.filename );
    if ( shaders[i].source == NULL ) {
        std::cerr << "Failed to read " << s.filename << std::endl;
        exit( EXIT_FAILURE );
    }
    GLuint shader = glCreateShader( s.type );
    glShaderSource( shader, 1, (const GLchar**) &s.source, NULL );
    glCompileShader( shader );
    GLint  compiled;
    glGetShaderiv( shader, GL_COMPILE_STATUS, &compiled );
    if ( !compiled ) {
        std::cerr << s.filename << " failed to compile:" << std::endl;
        GLint  logSize;
        glGetShaderiv( shader, GL_INFO_LOG_LENGTH, &logSize );
        char* logMsg = new char[logSize];
        glGetShaderInfoLog( shader, logSize, NULL, logMsg );
        std::cerr << logMsg << std::endl;
        delete [] logMsg;
        exit( EXIT_FAILURE );
    }
    delete [] s.source;
    glAttachShader( program, shader );
    }
    /* link  and error check */
    glLinkProgram(program);
    GLint  linked;
    glGetProgramiv( program, GL_LINK_STATUS, &linked );
    if ( !linked ) {
    std::cerr << "Shader program failed to link" << std::endl;
    GLint  logSize;
    glGetProgramiv( program, GL_INFO_LOG_LENGTH, &logSize);
    char* logMsg = new char[logSize];
    glGetProgramInfoLog( program, logSize, NULL, logMsg );
    std::cerr << logMsg << std::endl;
    delete [] logMsg;
    exit( EXIT_FAILURE );
    }
    /* use program object */
    glUseProgram(program);
    return program;
}
}  // Close namespace Angel block

你能告诉我如何修改这个程序吗?

您可以在生成错误的头文件中定义_CRT_SECURE_NO_WARNINGS,在包含头文件之前,或者通过将其添加到"项目->属性->配置属性->C/c++ ->预处理器->预处理器定义"中的项目设置中将其应用于整个项目。

#define _CRT_SECURE_NO_WARNINGS
#include "initshader.h"
//... your code here

如果您使用的是预编译的头文件,并且生成错误的头文件包含在stdafx.h中,则需要将其添加到stdafx.h头文件中,或者如上所述添加到项目设置中。