Кросс-платформенная компиляция MyRuLib в Linux для Windows
Инструкция написана для 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