GLFW和代码块

时间:2011-10-22 00:35:27

标签: codeblocks glfw

我在使用代码块10.05时遇到了一些困难,因为它识别了我机器上的GLFW库。当我创建一个空项目,并复制粘贴此GLFW教程中的代码>> http://content.gpwiki.org/index.php/GLFW:Tutorials:Basics

#include <stdlib.h>
#include <GL/glfw.h>

void Init(void);
void Shut_Down(int return_code);
void Main_Loop(void);
void Draw_Square(float red, float green, float blue);
void Draw(void);

float rotate_y = 0,
      rotate_z = 0;
const float rotations_per_tick = .2;

int main(void)
{
  Init();
  Main_Loop();
  Shut_Down(0);
}

void Init(void)
{
  const int window_width = 800,
            window_height = 600;

  if (glfwInit() != GL_TRUE)
    Shut_Down(1);
  // 800 x 600, 16 bit color, no depth, alpha or stencil buffers, windowed
  if (glfwOpenWindow(window_width, window_height, 5, 6, 5,
                     0, 0, 0, GLFW_WINDOW) != GL_TRUE)
    Shut_Down(1);
  glfwSetWindowTitle("The GLFW Window");

  // set the projection matrix to a normal frustum with a max depth of 50
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  float aspect_ratio = ((float)window_height) / window_width;
  glFrustum(.5, -.5, -.5 * aspect_ratio, .5 * aspect_ratio, 1, 50);
  glMatrixMode(GL_MODELVIEW);
}

void Shut_Down(int return_code)
{
  glfwTerminate();
  exit(return_code);
}

void Main_Loop(void)
{
  // the time of the previous frame
  double old_time = glfwGetTime();
  // this just loops as long as the program runs
  while(1)
  {
    // calculate time elapsed, and the amount by which stuff rotates
    double current_time = glfwGetTime(),
           delta_rotate = (current_time - old_time) * rotations_per_tick * 360;
    old_time = current_time;
    // escape to quit, arrow keys to rotate view
    if (glfwGetKey(GLFW_KEY_ESC) == GLFW_PRESS)
      break;
    if (glfwGetKey(GLFW_KEY_LEFT) == GLFW_PRESS)
      rotate_y += delta_rotate;
    if (glfwGetKey(GLFW_KEY_RIGHT) == GLFW_PRESS)
      rotate_y -= delta_rotate;
    // z axis always rotates
    rotate_z += delta_rotate;

    // clear the buffer
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    // draw the figure
    Draw();
    // swap back and front buffers
    glfwSwapBuffers();
  }
}

void Draw_Square(float red, float green, float blue)
{
  // Draws a square with a gradient color at coordinates 0, 10
  glBegin(GL_QUADS);
  {
    glColor3f(red, green, blue);
    glVertex2i(1, 11);
    glColor3f(red * .8, green * .8, blue * .8);
    glVertex2i(-1, 11);
    glColor3f(red * .5, green * .5, blue * .5);
    glVertex2i(-1, 9);
    glColor3f(red * .8, green * .8, blue * .8);
    glVertex2i(1, 9);
  }
  glEnd();
}

void Draw(void)
{
  // reset view matrix
  glLoadIdentity();
  // move view back a bit
  glTranslatef(0, 0, -30);
  // apply the current rotation
  glRotatef(rotate_y, 0, 1, 0);
  glRotatef(rotate_z, 0, 0, 1);
  // by repeatedly rotating the view matrix during drawing, the
  // squares end up in a circle
  int i = 0, squares = 15;
  float red = 0, blue = 1;
  for (; i < squares; ++i){
    glRotatef(360.0/squares, 0, 0, 1);
    // colors change for each square
    red += 1.0/12;
    blue -= 1.0/12;
    Draw_Square(red, .6, blue);
  }
}

使用codeblocks编译它会返回错误:

/home/user/Graphics/Project_2/test.c|27|undefined reference to `glfwInit'|
/home/user/Graphics/Project_2/test.c|30|undefined reference to `glfwOpenWindow'|
......
.....
....
...

但是当我创建一个简单的* .c文件并使用:

编译它时
gcc myprog.c -o myprog -lglfw -lGL -lpthread

它的工作原理..如何使代码块与GLFW一起工作? 感谢

4 个答案:

答案 0 :(得分:2)

请按照以下步骤操作。

  1. 首先从 here 下载GLFW。
  2. 解压缩zip文件
  3. 从include文件夹中复制glfw.h文件并粘贴到文件夹&#34; C:\ Program Files \ CodeBlocks \ MinGW \ include \ GL&#34;
  4. 从lib_mingw文件夹中复制所有文件(libglfw.a和libglfwdll.a) 并粘贴到文件夹&#34; C:\ Program Files \ CodeBlocks \ MinGW \ lib&#34;
  5. 解压缩文件的lib_mingw文件夹中的glfw.dll文件并粘贴它 在&#34; C:\ Windows \ System32&#34; floder。如果您不想将其保存在system32中,那么您可以将其保存在项目exe文件中。
  6. 现在,在code :: blocks中创建GLFW项目时,给出路径C:\ Program Files \ CodeBlocks \ MinGW&#34;对于glfw的位置
  7. 如果您再次感到困惑,请转到here逐步程序,并附上每一步的图片。

答案 1 :(得分:1)

确保您拥有正确类型的glfw库。即你的mingw编译器的x86或x64。 8小时的时间搜索未定义的引用错误,即链接器问题到glfw。

答案 2 :(得分:0)

答案 3 :(得分:0)

我之前在将GLFW导入代码块方面遇到了类似的问题,我最近发现了一些对我有用的东西。

我可以看到你已经正确地完成了标题安装,但是我会在这个响应中包含它,以便你可以仔细检查一切是否处于最佳状态。

我还建议您使用“文档”中的示例代码。 glfw.org的标签。它对我来说效果很好,所以我认为它也适合你。

由于您使用的是GLFW,我假设您要在应用程序中使用OpenGL,因此我将在教程中包含OpenGL的安装

一个。创建相关文件夹

您需要做的第一件事是为系统上的库文件和头文件设置一个位置。您可以在驱动器上的指定位置创建这些文件夹,也可以在code :: blocks项目中创建这些文件夹。

在我的情况下,我创建了一个&#39; lib&#39;并且&#39; head&#39;我的代码中的文件夹:: blocks project folder。

B中。下载&amp;安装必要的媒体

GLFW:

  1. 前往GLFW.org,然后点击下载&#39;。
  2. 点击32位Windows二进制文件&#39;,然后打开&#39; glfw-version.bin.WIN32&#39;在已下载的zip文件中。
  3. 打开&#39; include&#39;文件夹并将随附的GLFW文件夹复制到&#39; head&#39;您在A部分创建的文件夹。
  4. 打开&#39; glfw-version.bin.WIN32&#39;再次,选择&#39; lib&#39; 对应于编译器的文件夹。因为我使用的是MinGW GCC编译器,所以我选择了“lib-mingw&#39;”。要查找编译器,请转到code :: blocks,单击设置,然后单击编译器...&#39;。您的编译器可以在&#39;选择的编译器中找到。出现的窗口部分。
  5. 一旦你找到了&#39; lib&#39;您将使用的文件夹,打开它,并将所有文件复制到&#39; lib&#39;您在A部分创建的文件夹。
  6. GLEW(OpenGL):

    1. 转到this链接
    2. 打开下载的zip中的文件夹。
    3. 转到&#39; lib&#39;,然后发布,然后发布Win32,并将位于那里的所有文件复制到&#39; lib&#39;您在步骤A中创建的文件夹。
    4. 返回下载的zip中的文件夹。
    5. 输入&#39; include&#39;目录,并复制&#39; GL&#39;文件夹进入&#39; head&#39;在a。部分创建的文件夹。
    6. 此时,你的头脑是&#39;文件夹应包含&#39; GLFW&#39;和&#39; GL&#39;文件夹和你的&#39; lib&#39;文件夹应包含&#39; glew32&#39;,&#39; glew32s&#39;,以及GLFW为您的编译器提供的所有库文件。

      ℃。配置代码:: blocks project

      1. 在您打开项目后,右键单击工作区中项目的名称,然后点击“构建选项...”
      2. 在出现的窗口左侧,确保&#39; Debug&#39;被选中。
      3. 然后点击“#”链接器设置&#39;选项卡,并添加以下库:&#39; glfw.3&#39;,&#39; gdi32&#39;和&#39; opengl32&#39;。
      4. 接下来,在&#39;搜索目录&#39;选项卡,选择&#39;编译器&#39;标签。
      5. 添加路径到您的头部&#39;夹。如果在项目文件夹中创建了头文件夹,则只需键入&#39; head&#39;
      6. 即可
      7. 同样在“搜索目录”中。选项卡,选择&#39;链接器&#39;标签。
      8. 将路径添加到&#39; lib&#39;夹。同样,如果使用项目文件夹创建了lib文件夹,则只需键入&#39; lib&#39;。
      9. 点击&#39;好的&#39;在窗口的底部。
      10. d。构建并运行您的代码:)!希望这可以帮助!