Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.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++ eclipseide:链接OpenGL库(C+;+;)_C++_Eclipse_Windows_Opengl_Libraries - Fatal编程技术网

C++ eclipseide:链接OpenGL库(C+;+;)

C++ eclipseide:链接OpenGL库(C+;+;),c++,eclipse,windows,opengl,libraries,C++,Eclipse,Windows,Opengl,Libraries,经过数周无休止地尝试将一些库链接到Eclipse之后,我没有找到解决方案。虽然我没有收到错误,但当我按run时,会弹出一个对话框说“OpenGL32Test.exe已停止工作”(顺便说一下,OpenGL32Test是我的Eclipse项目的名称)。下面的代码是我试图编译的,但它不会创建它应该创建的黑色窗口和红色方块(代码取自我试图遵循的网站): #包含//用于MS Windows #包括//GLUT,包括glu.h和gl.h /*窗口重绘事件的处理程序。第一次出现窗口时回拨,然后重试 每当窗户需

经过数周无休止地尝试将一些库链接到Eclipse之后,我没有找到解决方案。虽然我没有收到错误,但当我按run时,会弹出一个对话框说“OpenGL32Test.exe已停止工作”(顺便说一下,OpenGL32Test是我的Eclipse项目的名称)。下面的代码是我试图编译的,但它不会创建它应该创建的黑色窗口和红色方块(代码取自我试图遵循的网站):

#包含//用于MS Windows
#包括//GLUT,包括glu.h和gl.h
/*窗口重绘事件的处理程序。第一次出现窗口时回拨,然后重试
每当窗户需要重新油漆时*/
无效显示(){
glClearColor(0.0f,0.0f,0.0f,1.0f);//将背景色设置为黑色和不透明
glClear(GL_COLOR_BUFFER_BIT);//清除颜色缓冲区
//以原点为中心绘制一个红色1x1正方形
glBegin(GL_四边形);//每组4个顶点构成一个四边形
glColor3f(1.0f,0.0f,0.0f);//红色
glVertex2f(-0.5f,-0.5f);//x,y
glVertex2f(0.5f,-0.5f);
glVertex2f(0.5f,0.5f);
glVertex2f(-0.5f,0.5f);
格伦德();
glFlush();//立即渲染
}
/*主要功能:GLUT作为控制台应用程序从Main()开始运行*/
int main(int argc,字符**argv){
glutInit(&argc,argv);//初始化GLUT
glutCreateWindow(“OpenGL设置测试”);//创建具有给定标题的窗口
GLUTINITWindowsSize(320320);//设置窗口的初始宽度和高度
glutInitWindowPosition(50,50);//定位窗口的初始左上角
glutDisplayFunc(display);//注册窗口重新绘制的显示回调处理程序
glutMainLoop();//进入无限事件处理循环
返回0;
}
我用链接库完成了该计划,我去了:

项目属性=>C/C++构建=>设置=>工具设置=> MIWW C++链接器< /P> 我添加了库文件freeglut、glu32和opengl32。程序根本不会运行。此外,在:

C/C++常规=>路径和符号=>库选项卡

我有3个图书馆链接。请帮我弄清楚为什么我的程序根本无法运行!是因为我把文件链接搞砸了吗?我在Windows上运行并使用MinGW,但我知道我正在链接库,因为程序成功构建,控制台行似乎正确:

g++-o OpenGLtest.exe main.o-lfreeglut-lglu32-lopengl32


我将该程序运行所需的所有必需的lib文件和头文件放在它们所属的MinGW根目录(include/GL文件夹和lib文件夹)中。有什么问题吗?

我找到了答案。基本上,我没有正确使用.dll。在windows中,动态库是扩展名为.dll的库。通过将.dll与.exe可执行文件放在同一目录中,程序可以运行

  • 所以我曾经做过同样的教程,我想不用在dll上复制就可以了
  • 添加“-static libgcc-static libstdc++”作为新项目的链接器标志。此文本应添加到链接器标志字段中,可通过在项目资源管理器中右键单击新项目并单击属性找到链接器标志字段。在项目属性下,展开C/C++构建菜单并单击设置。在“工具设置”选项卡下,展开“明文C++链接器”菜单并单击“杂项”。将文本添加到链接器标志字段,然后单击应用按钮

    那时候起作用了,但当我今晚尝试时,效果并没有那么好:-\

  • 但是在实验室的说明中,它确实说要将dll复制到MinGW-bin目录。。.dll的另一个名称是共享库
  • 将头文件从“include\GL”下载、解压缩并复制到“MINGW\u HOME\include\GL”;将库从“lib”下载到“MINGW\u HOME\lib”,并将共享库从“bin”下载到“MINGW\u HOME\bin”(应包含在PATH环境变量中),其中MINGW\u HOME是MINGW安装的目录

    #include <windows.h>  // For MS Windows
    #include <GL/glut.h>  // GLUT, includes glu.h and gl.h
    
    /* Handler for window-repaint event. Call back when the window first appears and
       whenever the window needs to be re-painted. */
    void display() {
       glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Set background color to black and opaque
       glClear(GL_COLOR_BUFFER_BIT);         // Clear the color buffer
    
       // Draw a Red 1x1 Square centered at origin
       glBegin(GL_QUADS);              // Each set of 4 vertices form a quad
          glColor3f(1.0f, 0.0f, 0.0f); // Red
          glVertex2f(-0.5f, -0.5f);    // x, y
          glVertex2f( 0.5f, -0.5f);
          glVertex2f( 0.5f,  0.5f);
          glVertex2f(-0.5f,  0.5f);
       glEnd();
    
       glFlush();  // Render now
    }
    
    /* Main function: GLUT runs as a console application starting at main()  */
    int main(int argc, char** argv) {
       glutInit(&argc, argv);                 // Initialize GLUT
       glutCreateWindow("OpenGL Setup Test"); // Create a window with the given title
       glutInitWindowSize(320, 320);   // Set the window's initial width & height
       glutInitWindowPosition(50, 50); // Position the window's initial top-left corner
       glutDisplayFunc(display); // Register display callback handler for window re-paint
       glutMainLoop();           // Enter the infinitely event-processing loop
       return 0;
    }