GLFW и кодовые блоки
У меня возникли некоторые трудности с распознаванием библиотек GLFW на моем компьютере с помощью кодовых блоков 10.05. Когда я создаю пустой проект и копирую, вставьте этот код, найденный в этом учебнике 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 ответа
Выполните следующую процедуру.
- Сначала загрузите GLFW отсюда.
- распакуйте архив
- скопируйте файл glfw.h из папки include и вставьте в папку "C:\Program Files\CodeBlocks\MinGW\include\GL"
- скопируйте весь файл (libglfw.a и libglfwdll.a) из папки lib_mingw и вставьте в папку "C:\Program Files\CodeBlocks\MinGW\lib"
- Файл glfw.dll из папки lib_mingw файла разархивирования и вставьте его в папку "C:\Windows\System32". Если вам не нравится хранить его в system32, вы можете сохранить его в файле exe проекта.
- Теперь при создании проекта GLFW в code::blocks укажите путь C:\Program Files\CodeBlocks\MinGW"для местоположения glfw
- Если вы снова запутались, тогда идите сюда для пошаговой процедуры с изображением каждого шага.
Убедитесь, что у вас правильный тип библиотек glfw. т.е. x86 или x64 для вашего компилятора mingw. 8 часов времени на поиск неопределенных ошибок ссылок, т.е. проблем компоновщика с glfw.
Ранее у меня были похожие проблемы с импортом GLFW в кодовые блоки, и недавно я нашел что-то, что работает для меня.
Я вижу, что вы уже правильно выполнили установку заголовка, но я включу это в этот ответ, чтобы вы могли еще раз проверить, что все в верхнем состоянии.
Я также рекомендую вам использовать пример кода на вкладке "Документация" glfw.org. Это работает очень хорошо для меня, поэтому я думаю, что это может быть и для вас.
Поскольку вы используете GLFW, я предполагаю, что вы хотите использовать OpenGL в своем приложении, поэтому я включу установку OpenGL в руководство
А. Создание соответствующих папок
Первое, что вам нужно сделать, это настроить расположение файлов библиотеки и файлов заголовков в вашей системе. Вы можете либо создать эти папки в указанном месте на вашем диске, либо вы можете создать эти папки в своем проекте code::blocks.
В моем случае я создал папку 'lib' и 'head' в папке проекта code::blocks.
Б. Загрузка и установка необходимых носителей
GLFW:
- Перейдите на GLFW.org и нажмите "Загрузки".
- Нажмите "32-битные двоичные файлы Windows" и откройте "glfw-version.bin.WIN32" в zip-файле, который был загружен.
- Откройте папку "include" и скопируйте вложенную папку GLFW в папку "head", созданную в части A.
- Снова откройте "glfw-version.bin.WIN32" и выберите папку "lib", соответствующую вашему компилятору. Поскольку я использую компилятор MinGW GCC, я выбрал "lib-mingw". Чтобы найти свой компилятор, перейдите в code::blocks, нажмите "Настройки", а затем нажмите "Компилятор...". Ваш компилятор находится в разделе "выбранный компилятор" появившегося окна.
- Найдя папку "lib", которую вы будете использовать, откройте ее и скопируйте все файлы в папку "lib", которую вы создали во время части A.
GLEW (OpenGL):
- Перейти по этой ссылке
- Откройте папку, которая находится внутри загруженного почтового индекса.
- Перейдите к "lib", затем отпустите, затем Win32 и скопируйте все файлы, расположенные там, в папку "lib", созданную на шаге A.
- Вернитесь в папку внутри загруженного почтового индекса.
- Войдите в каталог "include" и скопируйте папку "GL" в папку "head", созданную в части a.
На этом этапе ваша папка 'head' должна содержать папки 'GLFW' и 'GL', а папка 'lib' должна содержать 'glew32', 'glew32s' и все файлы библиотеки из GLFW для вашего компилятора.
C. Настройка вашего кода:: блокирует проект
- Открыв проект, щелкните правой кнопкой мыши имя проекта в рабочей области и выберите "Параметры сборки...".
- В левой части появившегося окна убедитесь, что выбрано "Отладка".
- Затем перейдите на вкладку "Настройки компоновщика" и добавьте следующие библиотеки: "glfw.3", "gdi32" и "opengl32".
- Затем на вкладке "Поиск в каталогах" выберите вкладку "Компилятор".
- Добавьте путь к вашей "головной" папке. Если папка head была создана в папке вашего проекта, вы можете просто набрать 'head'
- Также на вкладке "Поиск в каталогах" выберите вкладку "Компоновщик".
- Добавьте путь к вашей папке 'lib'. Опять же, если папка lib была создана в папке вашего проекта, вы можете просто набрать 'lib'.
- Нажмите "ОК" в нижней части окна.
D. Сборка и запуск вашего кода:)! Надеюсь это поможет!
Следуйте этим инструкциям: http://codeincodeblock.blogspot.com/2011/02/setup-glfw-project-in-codeblock.html