Настройка SDL в Mac OS X Lion с Xcode 4 - PullRequest
7 голосов
/ 22 ноября 2011

Я пытался заставить работать очень простую программу SDL. Я использую Mac OS X Lion. У меня есть SDL для работы в Snow Leopard, но, похоже, он не хочет работать со львом. Пока у меня есть это:

#include <iostream>
#include "SDL/SDL.h"

using namespace std;

/*
#ifdef main
#  undef main
#endif
*/

int main( int argc, char* args[] )
{
    SDL_Surface* hello = NULL;
    SDL_Surface* screen = NULL;
    SDL_Init( SDL_INIT_EVERYTHING );
    screen = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
    hello = SDL_LoadBMP( "hello.bmp" );
    SDL_BlitSurface( hello, NULL, screen, NULL );
    SDL_Flip( screen );
    SDL_Delay( 2000 );
    SDL_FreeSurface( hello );
    SDL_Quit();

    return 0;
}

Когда я пытаюсь скомпилировать этот код (в Xcode 4.1), он выдает мне эту ошибку:

Undefined symbols for architecture x86_64:
  "_main", referenced from:
      start in crt1.10.6.o
     (maybe you meant: _SDL_main)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Если я раскомментирую материал #ifdef, который я прокомментировал в настоящее время, программа компилируется, но затем получает SIGABRT в строке SDL_SetVideoMode. Этот комментарий, который я только что увидел в другой программе, я не уверен, должен ли я иметь его или нет.

Как мне заставить это работать?

Ответы [ 4 ]

4 голосов
/ 22 ноября 2011

Заголовочные файлы SDL переопределяют main с помощью макроса.Это в SDL_main.h:

#define main    SDL_main

Но это нормально.SDL предоставляет собственную функцию main(), которая затем вызывает вашу версию.Так что избавьтесь от этих определений, они делают его хуже, а не лучше.

Если ваш проект основан на Какао, то вы, вероятно, пропустили включение SDLmain.m в свой проект.Это обеспечивает дружественную к какао функцию main().Если ваш проект является родным C ++, то я предполагаю, что вы не включили все SDL-библиотеки в ваш проект, поэтому компоновщик не видит SDL main().

2 голосов
/ 30 марта 2012

Если вы используете платформу SDL, вам просто нужно добавить файлы SDLMain.h и SDLMain.m в ваш проект (при условии, что вы уже добавили SDL.framework в свой проект).

Эти файлы находятся в папке "devel-lite" на диске SDL, которую вы можете скачать здесь: http://www.libsdl.org/release/SDL-1.2.15.dmg

Эти два файла дадут вам удобную для Какао рутину, так что ваше приложение SDL может быть хорошо работающим приложением OS X.

1 голос
/ 13 января 2012

SDL.h не включает SDL_main.h Первая строка в вашем файле должна быть:

#include SDL_main.h

SDL_main переопределяет основную функцию, а затем выполняет собственную инициализацию, необходимую для работы SDL с OS X

При компиляции вам также необходимо добавить ссылку в libSDLmain в дополнение к libSDL

0 голосов
/ 08 октября 2012

У меня была та же ошибка времени соединения, что и для OP для чистого приложения на C ++ и OpenGL, и было принято решение использовать пример проекта из https://github.com/Ricket/HelloSDL

Это заставило меня добавить библиотеки Какао, но это все равно понадобилось бы , так как я нацеливался на iPhone.

...