GLFW и кодовые блоки - PullRequest
       30

GLFW и кодовые блоки

5 голосов
/ 22 октября 2011

У меня возникли некоторые проблемы с кодовыми блоками 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);
  }
}

и компилирую его с использованием кодовых блоков, он возвращает мне эту ошибку:

/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 ]

2 голосов
/ 18 сентября 2012

Выполните следующую процедуру.

  1. Сначала загрузите GLFW с здесь .
  2. распакуйте zip-файл
  3. скопировать файл glfw.h из папки include и вставить в папку "C: \ Program Files \ CodeBlocks \ MinGW \ include \ GL"
  4. скопировать весь файл (libglfw.a и libglfwdll.a)из папки lib_mingw и вставьте в папку «C: \ Program Files \ CodeBlocks \ MinGW \ lib» файл
  5. glfw.dll из папки lib_mingw файла разархивирования и вставьте его в папку «C: \ Windows \ System32»."Флодер.Если вам не нравится хранить его в system32, вы можете сохранить его в exe-файле своего проекта.
  6. Теперь при создании проекта GLFW в code :: blocks укажите путь C: \ Program Files \ CodeBlocks \MinGW "для местоположения glfw
  7. Если вы снова запутались, тогда перейдите сюда для пошаговой процедуры с изображением каждого шага.
1 голос
/ 23 июня 2013

Убедитесь, что у вас правильный тип библиотек glfw. т.е. x86 или x64 для вашего компилятора mingw. 8 часов времени на поиск неопределенных ошибок ссылок, т.е. проблем компоновщика с glfw.

0 голосов
/ 25 апреля 2016

Ранее у меня были похожие проблемы с импортом GLFW в кодовые блоки, и недавно я нашел что-то, что работает для меня.

Я вижу, что вы уже правильно выполнили установку заголовка, но я включу это в этот ответ, чтобы вы могли дважды проверить, что все в верхнем состоянии.

Я также рекомендую использовать пример кода на вкладке «Документация» на glfw.org. Это работает очень хорошо для меня, поэтому я думаю, что это возможно и для вас.

Поскольку вы используете GLFW, я предполагаю, что вы хотите использовать OpenGL в своем приложении, поэтому я включу установку OpenGL в учебное пособие


A. Создание соответствующих папок

Первое, что вам нужно сделать, - это настроить расположение библиотечных файлов и файлов заголовков в вашей системе. Вы можете либо создать эти папки в указанном месте на вашем диске, либо вы можете создать эти папки в своем проекте code :: blocks.

В моем случае я создал папку 'lib' и 'head' в папке проекта code :: blocks.


B. Загрузка и установка необходимых носителей

GLFW:

  1. Перейдите на GLFW.org и нажмите «Загрузки».
  2. Нажмите «32-битные двоичные файлы Windows» и откройте «glfw-version.bin.WIN32» в загруженном zip-файле.
  3. Откройте папку «include» и скопируйте вложенную папку GLFW в папку «head», созданную вами в части A.
  4. Снова откройте «glfw-version.bin.WIN32» и выберите папку «lib», которая соответствует вашему компилятору . Поскольку я использую компилятор MinGW GCC, я выбрал «lib-mingw». Чтобы найти свой компилятор, перейдите в code :: blocks, нажмите «Настройки», а затем нажмите «Компилятор ...». Ваш компилятор находится в разделе «выбранный компилятор» появившегося окна.
  5. Найдя папку «lib», которую вы будете использовать, откройте ее и скопируйте все файлы в папку «lib», которую вы создали во время части A.

GLEW (OpenGL):

  1. Перейти к этой ссылке
  2. Откройте папку, которая находится внутри загруженного zip.
  3. Перейдите в 'lib', затем отпустите, затем Win32 и скопируйте все файлы, расположенные там, в папку 'lib', которую вы создали на шаге A.
  4. Вернитесь в папку внутри загруженного zip.
  5. Войдите в каталог «include» и скопируйте папку «GL» в папку «head», созданную в части a.

На этом этапе ваша папка 'head' должна содержать папки 'GLFW' и 'GL', а папка 'lib' должна содержать 'glew32', 'glew32s' и все библиотечные файлы из GLFW для вашего компилятора. .


C. Настройка вашего кода :: блокирует проект

  1. После того, как вы открыли свой проект, щелкните правой кнопкой мыши на имени вашего проекта в рабочей области и нажмите «Опции сборки ...»
  2. В левой части появившегося окна убедитесь, что выбрано «Отладка».
  3. Затем перейдите на вкладку «Настройки компоновщика» и добавьте следующие библиотеки: «glfw.3», «gdi32» и «opengl32».
  4. Затем на вкладке «Поиск в каталогах» выберите вкладку «Компилятор».
  5. Добавьте путь к вашей «головной» папке. Если папка head была создана в папке вашего проекта, вы можете просто набрать 'head'
  6. Также на вкладке «Поиск в каталогах» выберите вкладку «Компоновщик».
  7. Добавьте путь к вашей папке 'lib'. Опять же, если папка lib была создана с вашей папкой проекта, вы можете просто набрать 'lib'.
  8. Нажмите «ОК» в нижней части окна.

D. Построй и запусти свой код :)! Надеюсь это поможет!

0 голосов
/ 29 декабря 2011
...