2015-08-30 4 views
2

Это довольно пустой вопрос. В принципе, я не могу скомпилировать базовую программу Hello World на OSX (Yosemite), используя внешнюю библиотеку SDL2.Как скомпилировать C++-программу с SDL2 на OS X?

Я пытаюсь сделать это на консоли без помощи каких-либо IDE. Я уже установил SDL 2.0.3, и он находится по пути /Library/Frameworks/SDL2.framework.

Мой главный файл выглядит следующим образом:

#include <SDL2/SDL.h> 
#include <stdio.h> 

bool init(); 
void close(); 

SDL_Window* gameWindow = NULL; 
SDL_Surface* gameScreenSurface = NULL; 

bool init() 
{ 
    ... 
} 

void close() 
{ 
    ... 
} 

int main(int argc, char** argv) 
{ 
    if(!init()) 
    { 
     printf("Failed to initialize!\n"); 
    } 
    else 
    { 
     SDL_Delay(2000); 
    } 
    close(); 
    return 0; 
} 

И у меня тоже есть Makefile (взятый из примера я нашел где-то), который выглядит следующим образом:

CC = g++ 
LDFLAGS = -g -Wall 

PROGNAME = doom 
SOURCES = main.cpp 
INCLUDES = 
OBJECTS = $(subst %.cc, %.o, $(SOURCES)) 
ROOTCFLAGS := $(shell root-config --cflags) 
ROOTLIBS := $(shell root-config --libs) 
ROOTGLIBS := $(shell root-config --glibs) 
ROOTLIBS := $(shell root-config --nonew --libs) 
CFLAGS  += $(ROOTCFLAGS) 
LIBS  += $(ROOTLIBS) 

all: doom 

$(PROGNAME): $(OBJECTS) 
    $(CC) $(LDFLAGS) -o doom $(OBJECTS) $(LIBS) 

%.o : %.cc $(INCLUDES) 
    $(CC) ${CFLAGS} -c -g -o [email protected] $< 

И вот об этом. Когда я бегу make, я получаю такой ответ:

make: root-config: Command not found 
make: root-config: Command not found 
make: root-config: Command not found 
make: root-config: Command not found 
g++ -g -Wall -o doom main.cpp 
Undefined symbols for architecture x86_64: 
    "_SDL_CreateWindow", referenced from: 
     init() in main-8b6fae.o 
    "_SDL_Delay", referenced from: 
     _main in main-8b6fae.o 
    "_SDL_DestroyWindow", referenced from: 
     close() in main-8b6fae.o 
    "_SDL_GetError", referenced from: 
     init() in main-8b6fae.o 
    "_SDL_GetWindowSurface", referenced from: 
     init() in main-8b6fae.o 
    "_SDL_Init", referenced from: 
     init() in main-8b6fae.o 
    "_SDL_Quit", referenced from: 
     close() in main-8b6fae.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
make: *** [doom] Error 1 

Таким образом, я могу получить некоторые рекомендации, пожалуйста? Я немного потерял, с чего начать. Я никогда не компилировал программу на OSX или любую ОС на базе Unix.

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

Заранее спасибо.

+0

Вот мой sdl2 пример, работает на OSX, но я использую CMake для создания: https://github.com/nickdesaulniers/sdl2web –

ответ

3

Созданный файл make имеет переменные для структуры анализа данных ROOT, а не для SDL2.

Попробуйте запустить

g++ $(sdl2-config --cflags) -g -Wall -o doom main.cpp $(sdl2-config --libs) 

, чтобы начать.

0

Как сказано в сообщении amitp, вы пытаетесь использовать флаги компилятора и компоновщика для рамки ROOT. Попробуйте вместо этого:

CFLAGS += -F/Library/Frameworks 
LDFLAGS += -F/Library/Frameworks 
LIBS += -framework SDL2 
Смежные вопросы