2014-10-30 3 views
0

Я пробовал SDL для iOS, и он шел плавно, пока я не добавил sdl_ttf в микс. Единственный выход, который я хотел бы получить былsdl_ttf iOS неправильная точка входа

apinames 0.1: extract FreeType API names from header files 

this program is used to extract the list of public FreeType API 
functions. It receives the list of header files as argument and 
generates a sorted list of unique identifiers 

usage: apinames header1 [options] [header2 ...] 

options: -  : parse the content of stdin, ignore arguments 
      -v  : verbose mode, output sent to standard error 
      -oFILE : write output to FILE instead of standard output 
      -dNAME : indicate DLL file name, 'freetype.dll' by default 
      -w  : output .DEF file for Visual C++ and Mingw 
      -wB : output .DEF file for Borland C++ 
      -wW : output Watcom Linker Response File 

После прибегая к помощи, я нашел это так вопрос от кого-то, кто имел такую ​​же проблему, как и я: SDL2_ttf won't run on ios

Это кажется, что другой основной (один внутри sdl_ttf) является выполняются и производят выходные данные.

  1. Комментатор на посте я говорил сказал: «Я думаю, вы включили apinames.c в проекте из каталога инструментов, и что главное, что получение бега». Что такое каталог инструментов? Как я могу это исправить?

  2. Как изменить точку входа проекта Xcode на мой main.cpp?

Благодарим за любые советы.

+0

Странно, у меня никогда не было проблемы с SDL_ttf на iOS, но с тех пор я переключился на использование Freetype напрямую. –

ответ

0

Я должен был бы увидеть ваш проект, чтобы ответить # 1 (вы посмотрели на свои «скомпилированные источники» для apinames.c?), Но, возможно, это будет неважно, если я отвечу # 2.

Если посмотреть на исходный файл SDL_main.h вы увидите:

#elif определен (__ IPHONEOS__)/* На IOS SDL обеспечивает основную функцию, которая создает делегат приложения и запускает приложение IOS .

См. Src/video/uikit/SDL_uikitappdelegate.m для получения более подробной информации. */

#define SDL_MAIN_NEEDED

получается, вы можете создать подкласс SDLUIKitDelegate и заставить SDL, чтобы создать его экземпляр, создав категорию, как это:

@implementation SDLUIKitDelegate (MyDelegate) 
+ (NSString *)getAppDelegateClassName 
{ 
    //override this SDL method so an instance of our subclass is used 
    return @"MyDelegateClass"; 
} 
@end 

вы хотите взглянуть на источник SDLUIKitDelegate, чтобы вы могли почувствовать, с чем вы возитесь, но мое приложение просто переопределяет application:didFinishLaunchingWithOptions: следующим образом:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    AddLogger(createAppleLogger()); 
    [self setupWrapper]; 

    // Notice how we call super implementation so SDL can finish its setup 
    return [super application:application didFinishLaunchingWithOptions:launchOptions]; 
} 

Это достаточно близко для входа? Или вам действительно нужно main()? Это означало бы, что нужно сделать все настройки SDL самостоятельно (что может измениться между версиями SDL).

Также обратите внимание, что ваш main() должен быть переопределен как SDL_main и должен быть вызван в какой-то момент на раннем этапе (если используется моя память).

+0

Держу пари, это было бы очень хорошим ответом для меня, если бы я знал Objective-C. : P Спасибо в любом случае. –

0

Перетащите, чтобы переупорядочить ваши фреймворки в разделе «Связывание двоичных файлов с библиотеками» в вашей цели сборки xcode в разделе «Сборка фаз». Убедитесь, что SDL2.framework (или все, что вы используете) находится выше SDL2_image.framework.

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