【发布时间】:2020-06-28 09:37:00
【问题描述】:
我正在尝试使用 OpenGL 和 C++,并按照this video tutorial 编写程序(我的代码与他的完全相同)。我还按照 freeglut 网站 here 上的说明设置 freeglut、编译和链接我的程序。源代码编译没有问题,但是当我尝试运行 exe 时出现错误。我能想到的唯一原因是我没有使用 IDE,所以我可能在运行 exe 时缺少一些编译步骤或缺少一些命令行参数,而 IDE 会自动完成这些。有人能告诉我我需要做什么才能正确运行我的程序吗?
这是我的代码:
#include <GL/glut.h>
void init() {
glClearColor(1.0, 1.0, 0.0, 1.0);
}
void display() {
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glFlush();
}
int main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB);
glutInitWindowPosition(200, 100);
glutInitWindowSize(500, 500);
glutCreateWindow("Window 1");
glutDisplayFunc(display);
init();
glutMainLoop();
}
当我编译时我运行
gcc -c -o hello.o hello.cpp -I"C:\MinGW\include"
gcc -o hello.exe hello.o -L"C:\MinGW\lib" -lfreeglut -lopengl32 -Wl,--subsystem,windows
然后我尝试运行hello.exe,但我只收到一条错误消息“应用程序无法正确启动(0xc000007b)”。
顺便说一句,我看到了这个duplicate question,但我尝试将 dll 放在同一个目录中(从一开始就在那里),但这并没有改变任何东西。
【问题讨论】:
-
你的标签是
c++,你的文件扩展名是.cpp,但编译为C (gcc)。那么,它是 C 还是 C++?如果是 C,则应添加void作为函数参数。请在调试器中运行您的应用程序(例如gdb)以获取更多信息,并显示回溯。 -
0xc000007b 表示无效的图像格式。确保您的所有堆栈(操作系统、编译器、dll)都是相同的架构。你能运行一个非 OpenGL 的 hello world 程序吗?
-
@Erlkoenig
gcc命令将 C++ 文件编译为 C++。在调试器中运行甚至无法启动的东西是相当不可能的。 -
@n.'pronouns'm。是的,但是
gcc没有正确链接 C++ 代码。不知道细节,但它可能只是错误的原因...无论如何,尝试非 OpenGL 程序是个好主意。 -
@Erlkoenig 不,任何问题都会导致链接器错误,而不是运行时错误。确实,需要使用 g++ 来链接 C++ 程序,但是由于该程序不使用任何 C++ 库工具,因此可以使用 gcc 链接。我刚刚用这些命令(使用 gcc)尝试了这个确切的程序,它为我编译、链接和运行。