Кросс-платформенная компиляция MyRuLib в Linux для Windows

Материал из LinTest Wiki
(перенаправлено с «MyRuLib MinGW»)
Перейти к: навигация, поиск

Инструкция написана для Ubuntu 12.04, но в общих чертах верна для любой системы. Собирая библиотеки wxWidgets и FreeType мы задействуем в качестве префикса поддиректорию в домашней папке пользователя. Во-первых, устанавливаемые библиотеки и заголовочные файлы для Windows не будут мешать работе в среде Linux. Во-вторых, это позволит нам не не использовать лишний раз административные права.

Допустим, что домашняя папка текущего пользователя имеет путь /home/user/

Для начала устанавливаем компилятор MinGW-w64.

sudo apt-get install gcc-mingw-w64-i686 g++-mingw-w64-i686

Также нам потребуются обычный компилятор gcc и утилита gettext

sudo apt-get install gcc gettext

Скачиваем исходные тексты библиотеки wxWidgets в домашнюю директорию, распаковываем, собираем и устанавливаем.

cd ~
mkdir i686-w64-mingw32
wget http://sourceforge.net/projects/wxwindows/files/2.8.12/wxWidgets-2.8.12.tar.bz2
tar -xvjf wxWidgets-2.8.12.tar.bz2
ln -s wxWidgets-2.8.12 wxWidgets
cd wxWidgets-2.8.12
mkdir build_msw
cd build_msw
../configure \
    --prefix=/home/user/i686-w64-mingw32 \
    --host=i686-w64-mingw32 \
    --enable-unicode \
    --without-expat \
    --without-regex \
    --without-libtiff \
    --with-libjpeg=builtin \
    --with-libpng=builtin \
    --with-zlib=builtin \
    --disable-shared
make
make install

Теперь получаем исходные тексты MyRuLib, распаковываем, собираем программу.

cd ~
wget http://www.lintest.ru/pub/myrulib-0.29.9.tar.bz2
tar -xvjf myrulib-0.29.9.tar.bz2
cd myrulib-0.29.9
mkdir build_msw
cd build_msw
LDFLAGS="-static-libgcc -static-libstdc++" ../configure \
    --with-wx-prefix=/home/user/i686-w64-mingw32 \
    --host=i686-w64-mingw32 \
    --with-locale
make

Обратите внимание, что для статической линковки используются следующие флаги:

LDFLAGS="-static-libgcc -static-libstdc++"

Иначе после сборки при запуске готовой программы мы получим ошибки:

Library libgcc_s_sjlj-1.dll not found.
Library libstdc++-6.dll not found.

Если хотим собрать со встроенным CoolReader3, тогда нужно дополнительно установить библиотеку FreeType2.

Скачиваем исходные тексты FreeType2, распаковываем, собираем и устанавливаем.

cd ~
wget http://sourceforge.net/projects/freetype/files/freetype2/2.4.10/freetype-2.4.10.tar.bz2
tar -xvjf freetype-2.4.10.tar.bz2
cd freetype-2.4.10
mkdir build_msw
cd build_msw
../configure \
    --host=i686-w64-mingw32 \
    --prefix=/home/user/i686-w64-mingw32 \
    --disable-shared
make
make install

Исходные тексты уже есть, поэтому создаем папку для сборки, запускаем конфигурационный скрипт, собираем.

cd ~/myrulib-0.29.9
mkdir build_cr3
cd build_cr3
LDFLAGS="-static-libgcc -static-libstdc++" ../configure \
    --host=i686-w64-mingw32 \
    --with-wx-prefix=/home/user/i686-w64-mingw32 \
    --with-ft-prefix=/home/user/i686-w64-mingw32 \
    --disable-freetypetest \
    --with-locale \
    --with-reader 
make

Примечание: Для компиляции CREngine нам потребовались заголовочные файлы libpng, libjpeg и zlib. Они присутствуют в дистрибутиве wxWidgets в папке wxWidgets-2.8.12/src/. Чтобы компилятор смог их найти, мы создали символическую ссылку в домашней папке на этапе сборки wxWidgets.

ln -s wxWidgets-2.8.12 wxWidgets

Для кросс-компиляции в архиве с исходными текстами имеется файл ./windows.sh

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты
Проекты