![]() |
|||
Руководство по портированиюВведениеЭто руководство рассказывает о портировании под AROS программного обеспечения, распространяемого с configure или make-скриптами. Это справедливо для большинства программ с открытым исходным кодом из мира Linux. Данное руководство основано на документе, написанном Джоаном Самуэллсоном для AmigaOS4. Что портировать?
Получение SDKНаиболее просто портировать программы под AROS из Linux, т.к. для этого обычно есть все необходимые средства разработки. Смотрите Руководство разработчика для информации о том, как установить SDK. ОсновыПервым же вашим действием будет поиск информации о том, как собирать ваш проект. Если в корневой директории архива есть файл под названием configure, то вы сможете настроить его под вашу платформу. Как это сделать - описано в следующей главе. После того как проект правильно настроен, наступает время для запуска компилятора. Запустите сборку вашего проекта командой make. Однако, если файла configure нет, то ищите файл под названием Makefile. Исправьте его в соответствии с требованиями AROS и соберите проект командой make. Если всё скомпилировалось и скомпоновалось, то вы готовы к тестированию портированной версии вашей программы. Очень часто встречается проблема, когда программа не может найти свои файлы данных, что приводит к краху. Исправьте пути, как описано в главе об исправлении путей, и попробуйте снова. Выполните команду strip для очистки исполняемого файла от отладочной информации, для того чтобы сделать их меньше. Теперь, если всё работает, то загрузите портированную программу на http://archives.aros-exec.org и http://www.aminet.net! Как настроитьПод Linux пакеты с настроечными скриптами обычно устанавливаются в 3 шага: ./configure make sudo make install Тот факт, что мы используем кросскомпилятор делает настройку под AROS более сложной, чем, например, под AmigaOS4. Введите ./configure --help, чтобы посмотреть доступные опции настройки. Если настройка завершается неудачно, можно попытаться отключить некоторые возможности. Простой пример./configure CC=i386-aros-gcc \ --build=local --host=i686-aros --disable-nls --without-x --without-pic --disable-shared Подсказка Имеет смысл записать опции настройки в текстовый файл. В этом случае мы сможем его легко запустить заново, введя sh build.sh. Но перед тем, как мы повторно запустим скрипт, необходимо выполнить команду rm -f config.cache, для того чтобы вернуть процесс настройки в исходное состояние. Пояснения к опциям, которые мы использовали выше:
Предупреждение Не выполняйте команду sudo make install, так как тогда ваше приложение будет установлено в Linux по адресу /usr/local. Пример на SDL (ручная установка)Следующий пример описывает процесс настройки программы Ltris, но он подобен настройке других SDL приложений: ./configure CC=i386-aros-gcc LDFLAGS="-nix" \ --prefix=/PROGDIR \ --build=local --host=i686-aros \ --disable-nls --without-x --without-pic --disable-shared \ --with-sdl-prefix=/usr/local/aros-sdk/i386-aros
После успешного выполнения скрипта настройки и команды make мы должны скопировать исполняемый файл ltris и его файлы данных по такому адресу, где исполняемый файл найдёт файлы данных:
ltris
ltris (binary)
share
ltris
gfx
sounds
Пример на SDL (полуавтоматическая установка)Мы можем использовать почти такие же опции что и выше: ./configure CC=i386-aros-gcc LDFLAGS="-nix" \ --prefix=/PROGDIR --bindir=/PROGDIR \ --build=local --host=i686-aros \ --disable-nls --without-x --without-pic --disable-shared \ --with-sdl-prefix=/usr/local/aros-sdk/i386-aros
Не забудьте опцию --prefix иначе это приведёт к установке файлов AROS в некоторые директории Linux. Теперь вы можете пересобрать ваш проект (выполните make distclean, запустите скрипт настройки, выполните make). Теперь нам надо выполнить sudo make install. Но лучше сначала сделать следующие шаги:
Это даст нам возможность получить доступ к /PROGDIR без прав root'а. Теперь мы наконец выполняем make install, что должно установить программу в директорию /PROGDIR. Так как это не слишком подходящее место, то мы скопируем её в место, где AROS сможет её найти (например, cp -r /PROGDIR~/AROS/games/ltris). Не забудьте выполнить rm -rf /PROGDIR/* перед тем, как собирать какой-либо другой проект. Распространённые при настройке ошибкиЯ получил ошибку о том, что цель или хост i686-aros не доступен (target or host i686-aros isn't available).
Подобное также часто случается, когда configure ищет SDL_ttf, и теперь вы знаете почему. Нам надо указать ещё несколько библиотек, кроме тех, от которых зависит SDL_ttf. Ей необходимы -lfreetype и -lz. Добавьте их самостоятельно в качестве тренировки. Если вы добавили необходимые зависимости в скрипт настройки, а он по-прежнему не работает, то возможно, потеряны файлы в SDK. Например, нет библиотек SDL. Если скрипт всё ещё не работает и вы уверены, что установили библиотеку, то попробуйте удалить в скрипте настройки целиком секцию, в которой производится проверка недостающей библиотеки. Это не рекомендуется и применимо только если исчерпаны остальные возможности. Теперь вы готовы к сборке вашего проекта. При портировании приложения из unix всегда вводите make. Создание makefile вручнуюТакой makefile можно использовать, если система сборки запутанна, и вы хотите её немного упростить, изменить в соответствии с вашими нуждами. Обычно вам надо всего лишь изменить существующий makefile, изменить название компилятора C (иначе будет создан исполняемый файл для Linux) и добавить несколько ссылок на необходимые библиотеки. Далее объясняется, что делают флаги.
CC = i386-aros-gcc
RM = rm
STRIP = i386-aros-strip --strip-unneeded --remove-section .comment
CFLAGS = -Wall -O2
LDFLAGS = -nix -lsmpeg -lSDL_gfx -lSDL_net -lSDL_image -lpng -ljpeg -lz -lSDL_mixer \
-lvorbisfile -lvorbis -logg -lSDL_ttf -lfreetype -lz -lsdl -lauto -lpthread -lm
OBJS = a.o b.o c.o
OUTPUT = test.exe
all: $(OBJS)
$(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) -o $(OUTPUT)
main.o: main.cpp main.h
$(CC) $(CFLAGS) -c main.cpp
strip:
$(STRIP) $(OUTPUT)
clean:
$(RM) -f $(OBJS) $(OUTPUT)
Не забудьте, что вам надо использовать символы табуляции перед командами (не пробелы). Использование системы сборкиСистема сборки содержит скрипты для настройки пакетов. Большим преимуществом при использовании системы сборки является лёгкость портирования приложения на другие разновидности AROS.
Смотрите файл $(TOP)/config/make.tmpl для пояснения к аргументам. В $(TOP)/contrib/gnu уже присутствует большое количество пакетов GNU. РазноеПреобразование путей Unix в пути AROSКак преобразовать пути Unix в пути AROS? Замените getenv("HOME") на "/PROGDIR/". Примеры:
было: strcpy(path, getenv("HOME"));
стало: strcpy(path, "/PROGDIR/");
было: strcpy(home,getenv("HOME"));
стало: strcpy(home,"/PROGDIR/");
было: sprintf(rc_dir, "%s/.gngeo/romrc.d", getenv("HOME"));
стало: sprintf(rc_dir, "%sgngeo/romrc.d", "/PROGDIR/");
Заметьте, что я убрал "/." в последнем примере. Пути к директориям с данными часто устанавливаются в процессе настройки при помощи опции -DDATADIR=. В этом случае определите его так: -DDATADIR=/PROGDIR/. Также часто директории с данными прописаны в makefile. Найдите в нём опцию DATADIR= и измените её на DATADIR=/PROGDIR/. ОпределенияОпределения (defines) часто устанавливаются в config.h, если что-то настроено неправильно, то вы можете сколько угодно раз менять настройки, используя #define и #undef. Пример определения, которое подходит для всех разновидностей AmigaOS:
#ifdef __AMIGA__
blah blah blah
#else
blah blah blah
#endif
Пример определения, которое подходит только для AROS:
#ifdef __AROS__
blah blah blah
#else
blah blah blah
#endif
Пример определения, которое подходит для BeOS и AROS: #if !defined(__BEOS__) && !defined(__AROS__) Пример более сложного #ifdef: #ifdef GP2X char *gngeo_dir="save/"; #elif defined __AROS__ char *gngeo_dir="/PROGDIR/save/"; #else char *gngeo_dir=get_gngeo_dir(); #endif Некоторые пакеты с открытым исходным кодом уже адаптированы под операционные системы, подобные Amiga. Если вы найдёте в исходном коде что-нибудь вроде #ifdef __AMIGA__, то можете попытаться добавить определение к опциям настройки (например, CFLAGS="-nix -D__AMIGA__"). Расшифровка сообщений об ошибках
Распространённые ошибкиwarning: incompatible implicit declaration of built-in function 'exit'; warning: incompatible implicit declaration of built-in function 'abort': решение: #include <stdlib.h> warning: implicit declaration of function 'strlen'; warning: incompatible implicit declaration of built-in function 'strlen': решение: #include <string.h> warning: implicit declaration of function 'memcpy'; warning: incompatible implicit declaration of built-in function 'memcpy': решение: #include <string.h> error: memory.h: No such file or directory: решение: #include <string.h> error: malloc.h: No such file or directory: решение: #include <stdlib.h> warning: incompatible implicit declaration of built-in function 'printf': решение: #include <stdio.h> warning: implicit declaration of function 'MyRemove': решение: #define MyRemove Remove Подсказки и хитростиКак найти строку в тексте используя GREP? grep -R "здесь текст, который надо найти" * Как мне сделать DIFF файл с моими изменениями? diff исходный_файл.c изменённый_файл.c >./исходный_файл.patch
Как перенаправить сообщения и об ошибках и предупреждения компилятора GCC в текстовый файл? make 2>warnings.txt |
Copyright © 1995-2009, The AROS Development Team. Все права защищены. Amiga© является торговым знаком Amiga Inc. Все прочие торговые знаки принадлежат их собственникам. |