sdl_ttf iOS неправильная точка входа

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

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 не будет работать на IOS

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

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

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

Спасибо за любой совет.

0

Решение

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

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

#eliffined (__ 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

Другие решения

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

0

По вопросам рекламы [email protected]