Кросс-платформенная компиляция MyRuLib в Linux для Windows
Инструкция написана для Ubuntu 12.04, но в общих чертах верна для любой системы. Собирая библиотеки wxWidgets и FreeType мы задействуем в качестве префикса поддиректорию в домашней папке пользователя. Во-первых, устанавливаемые библиотеки и заголовочные файлы для Windows не будут мешать работе в среде Linux. Во-вторых, это позволит нам не не использовать лишний раз административные права.
Допустим, что домашняя папка текущего пользователя имеет путь /home/user/
Для начала устанавливаем компилятор MinGW-w64.
1 | sudo apt-get install gcc-mingw-w64-i686 g++-mingw-w64-i686 |
Также нам потребуются обычный компилятор gcc и утилита gettext
1 | sudo apt-get install gcc gettext |
Скачиваем исходные тексты библиотеки wxWidgets в домашнюю директорию, распаковываем, собираем и устанавливаем.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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, распаковываем, собираем программу.
1 2 3 4 5 6 7 8 9 10 11 | 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, распаковываем, собираем и устанавливаем.
1 2 3 4 5 6 7 8 9 10 11 12 | 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 |
Исходные тексты уже есть, поэтому создаем папку для сборки, запускаем конфигурационный скрипт, собираем.
1 2 3 4 5 6 7 8 9 10 11 | 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.
1 | ln -s wxWidgets-2.8.12 wxWidgets |
Для кросс-компиляции в архиве с исходными текстами имеется файл ./windows.sh