编译FreeGLUT OpenGL代码时链接器提示‘Permission denied’错误如何解决?
解决FreeGLUT OpenGL编译时"Permission denied"错误
我尝试在FreeGLUT OpenGL代码中添加纹理,代码如下:
#include <GL/glut.h> #define STB_IMAGE_IMPLEMENTATION #include "stb_image.h" GLuint texture; void loadTexture(const char* filename) { int width, height, nrChannels; stbi_set_flip_vertically_on_load(true); unsigned char* data = stbi_load(filename, &width, &height, &nrChannels, STBI_rgb_alpha); if (!data) { fprintf(stderr, "Failed to load texture: %s\n", filename); exit(EXIT_FAILURE); } glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); stbi_image_free(data); } void frontscreen(){ glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texture); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex2f(-1.0f, -1.0f); glTexCoord2f(1.0f, 0.0f); glVertex2f( 1.0f, -1.0f); glTexCoord2f(1.0f, 1.0f); glVertex2f( 1.0f, 1.0f); glTexCoord2f(0.0f, 1.0f); glVertex2f(-1.0f, 1.0f); glEnd(); glDisable(GL_TEXTURE_2D); } void renderBitmapString(float x, float y, void *font, const char *string) { const char *c; glRasterPos2f(x, y); for (c = string; *c != '\0'; c++) { glutBitmapCharacter(font, *c); } } void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-1.0, 1.0, -1.0, 1.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); frontscreen(); renderBitmapString(-0.5, -0.9, GLUT_BITMAP_HELVETICA_18, "Press Enter"); glutSwapBuffers(); } void keyboard(unsigned char key, int x, int y) { switch(key) { case 27: // Escape key glutDestroyWindow(glutGetWindow()); // Exit the main loop break; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutGameModeString("1920x1080:32@60"); glutEnterGameMode(); glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glEnable(GL_DEPTH_TEST); loadTexture("frontscreen.jpg"); glutDisplayFunc(display); glutKeyboardFunc(keyboard); glutMainLoop(); // This will run until you press the Escape key return 0; }
但每次编译时都会弹出以下错误:
gcc -c -o example.o sphere.cpp && g++ -o example.exe example.o -lfreeglut -lopengl32 -lglu32 -Wl,--subsystem,windows && example.exe c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot open output file example.exe: Permission denied collect2.exe: error: ld returned 1 exit status
解决方法
- 结束正在运行的
example.exe进程:错误核心是无法写入example.exe文件,大概率是之前编译的程序仍在后台运行,占用了文件资源。打开任务管理器找到该进程并结束。 - 更换编译目录:如果当前目录是系统受保护目录(如
C:\Program Files),将项目移到普通用户目录(如Documents或自定义文件夹),确保当前用户有读写权限。 - 修改编译命令:在编译前先删除旧的可执行文件,避免文件被占用,修改后的命令如下:
del example.exe && gcc -c -o example.o sphere.cpp && g++ -o example.exe example.o -lfreeglut -lopengl32 -lglu32 -Wl,--subsystem,windows && example.exe - 检查杀毒软件:部分杀毒软件会拦截新生成的可执行文件,临时关闭杀毒软件或将编译目录加入白名单。
内容的提问来源于stack exchange,提问作者Priyamwada Sonnet
相关产品推荐
相关产品推荐

