2016-09-24 3 views
4

Я начинаю новый проект с использованием C++ и OpenGL, чтобы создать простую игру и научить себя OpenGL. Я не хочу использовать GLUT и предпочитаю использовать SDL для создания окон и т. Д. Однако у меня много неприятностей с Makefile. В настоящее время, когда я печатаю сделать, я получаю этот ответ, когда я включаю $(LFLAGS) $(LDFLAGS) в моем G ++ команды:C++/OpenGL - запуск нового проекта

g++-5 tetris.o -o tetris -std=c++14 
Undefined symbols for architecture x86_64: 
    "_SDL_CreateWindow", referenced from: 
     _main in tetris.o 
    "_SDL_GL_CreateContext", referenced from: 
     _main in tetris.o 
    "_SDL_Init", referenced from: 
     _main in tetris.o 
    "_SDL_PollEvent", referenced from: 
     game_loop(SDL_Window*)  in tetris.o 
    "_glewGetErrorString", referenced from: 
     _main in tetris.o 
    "_glewInit", referenced from: 
     _main in tetris.o 
ld: symbol(s) not found for architecture x86_64 
collect2: error: ld returned 1 exit status 
make: *** [tetris] Error 1 

и этот ответ, когда я не делаю

g++-5 -Wall -framework SDL2 tetris.o -o tetris -std=c++14 
ld: framework not found SDL2 
collect2: error: ld returned 1 exit status 
make: *** [tetris] Error 1 

Вот мой новый Makefile:

CC = g++-5 
CFLAGS = -Wall -c -Wno-deprecated-declarations 
LFLAGS = -Wall 
LDFLAGS = -framework SDL2 
LDLIBS= -lSDL2 -lglew -lGL 
INCLUDES = -I/Library/Frameworks/SDL2.framework/Headers/ 
STD = -std=c++14 

all: tetris 

tetris: tetris.o 
    $(CC) $(LFLAGS) $(LDFLAGS) tetris.o -o tetris $(STD) 

tetris.o: tetris.cpp 
    $(CC) $(CFLAGS) $(LDFLAGS) -o [email protected] tetris.cpp $(STD) 

.PHONY: clean 

clean: 
    rm tetris *.o 

И заголовки часть моего файла .cpp:

#include <SDL2/SDL.h> 
#include <GL/glew.h> 
#include <unistd.h> 
#include <iostream> 
+0

У вас есть 32-битная архитектура процессора или 64-битная? – Leos313

+0

64-разрядная ОС X El Capitan. Просто любопытно, что нужно сделать в make-файле, чтобы все это странно исчезло. Это не помогает, что все функции в учебниках OpenGL устарели. –

ответ

3

может быть, вам нужно добавить

LDFLAGS = -framework GLUT 

в свой Makefile

+0

Я думаю, что исправил это! Благодаря! –

+0

всего один больше вопросов сейчас ... –

+0

(Обновленный код/​​ошибки выше) –

0

Просто используйте freeglut, вам не нужно использовать SDL, так что вы можете начать работу с OpenGL.

+0

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

+0

Вы создаете дочернее окно в главном окне, поместите свой пользовательский интерфейс в главное окно, используйте дочернее окно для рендеринга OpenGL –

Смежные вопросы