понедельник, 19 мая 2008 г.

Создаём программы для WinMobile на Linux'e

Если вы хотите писать/написать какую/ие-то программы для своего PDA удобно располагаясь при этом в любимой ОС(линуксе конечно), то для этого можно воспользоватся компилятором CeGCC. Вот как я устанавливал этот замечательный кросс-компилятор на свой Debian:

Сначала переходим в свой домашний каталог:
$cd ~

Часть 1:
----------------------------------
Качаем cegcc с сайта http://sourceforge.net/projects/cegcc. Я качал версию 4.3.0:
~$wget -c http://switch.dl.sourceforge.net/sourceforge/cegcc/cegcc-gcc430.tar.gz

Но имеется проблемка, у меня система amd64, а скомпилированную cegcc можно загрузить только версию для i386. Поэтому если вы не счастливый обладатель amd64 то можете не читать строки ниже, а смело переходите к части 2.
Устанавливаем ia32-libs:
$sudo apt-get install ia32-libs

Загружаем необходимый пакет libgmp3:
$wget http://ftp.de.debian.org/debian/pool/main/g/gmp/libgmp3c2_4.2.2+dfsg-3_i386.deb

Создаём каталог /usr/linux32:
$sudo mkdir /usr/linux32

Распаковываем туда наш deb-пакет:
sudo dpkg -x 'libgmp3c2_4.2.2+dfsg-3_i386.deb' /usr/linux32

Чтобы эту библиотеку система могла найти создадим файл /etc/ld.so.conf.d/linux32.conf с таким содержимым:
/usr/linux32/usr/lib
/usr/linux32/lib

и выполним ldconfig:
$sudo /sbin/ldconfig

Часть 2:
----------------------------------
Переходим в корневой каталог:
$cd /

Распаковываем архив с CeGCC:
$sudo tar --gzip -xvf ~/cegcc-gcc430.tar.gz

В результате, в /opt должны распаковаться 2 папки - cegcc и mingw32ce, создадим для них отдельную папку и переместим туда:
$sudo mkdir /opt/wince
$cd /opt/wince
$sudo mv ../cegcc .
$sudo mv ../mingw32ce .

Теперь, для удобства вызова можно создать ссылки на компилятор cegcc в /usr/bin:
$sudo ln -s /opt/wince/mingw32ce/bin/arm-mingw32ce-gcc /usr/bin

Проверяем работоспособность компилятора. Для этого создадим файл test.c с таким содержанием:
#include
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
{
MessageBoxW(0, L"HELLO WORLD!", L"HELLO!", 0);
}

Попытаемся скомпилировать:
$ arm-mingw32ce-gcc -o test.exe test.c

Должен получится целевой файл test.exe. При использовании на своём девайсе не забудьте в папку с программой положить /opt/wince/cegcc/arm-cegcc/lib/cegcc.dll
Пользуемся!

Часть 3:
----------------------------------
Не так давно trolltech создала версию своей кросплатформенной библиотеки Qt для Windows CE платформы. В связи с таким событием появилось желание создавать qt-программы на линукс для целевой платформы Windows Mobile. Но есть проблема: в состав пакета программ cegcc не входит компилятор "arm-mingw32ce-g++". Основываясь на информации из списка рассылки http://www.mail-archive.com/cegcc-devel@lists.sourceforge.net/msg01155.html работа над компилятором g++ ещё не закончена. Так что придется пока подождать....

2 комментария:

polytheme комментирует...

почему это не входит, вроде в rpm вроде бы он есть ?

J3d1 комментирует...

Спасибо за статью. Возник вопрос: можно ли обойтись без библиотеки cegcc.dll и если "да", то в каких случаях - мне нужно просто проинициализировать SDL.