magist3r 05.09.2011 20:44
How-to`s — [Qt] Кросс-компиляция проекта под windows из под openSUSE
Добрый вечер, уважаемые знатоки! Как я вижу, месяц полезных статей еще никто не открыл, поэтому возьму на себя смелость сделать это. Итак, приступим.Вступление
Сам я учусь в универе, и моя специальность, пусть и косвенно, связана с кодингом. Так как я уже несколько лет как
Часть материала взята из этой статьи. Итак, поехали.
Первое, что нам необходимо сделать, это добавить репозиторий mingw:
1 |
sudo zypper ar -n "mingw" "http://download.opensuse.org/repositories/windows:/mingw:/win32/openSUSE_11.4/" mingw
|
И тут нас ждет первый сюрприз. И, надо сказать, приятный. В данном репозитории помимо кросс-компилятора обнаруживается скомпиленная библиотека Qt под винду. А это означает, что качать и ставить Qt SDK нет необходимости.
Второе, ставим необходимые пакеты:
1 |
|
Все остальные зависимости подтянутся автоматически.
Третье, и самое главное, это настройка конфига для qmake. В основном для редактирования конфига я пользовался вышеприведенной статьей. Делаем так:
1 |
|
То есть за основу берем стандартный конфиг для винды. Я оставлю тут diff win32-g++/qmake.conf win32-x-g++/qmake.conf:
То есть по сути заменяем стандартный компилятор на кросс-компилятор. Полный текст конфига тут.
Ну все, все настроено, можно конпелять. Переходим в папку с проектом и делаем в ней:
1 |
|
И тут нас ждет еще один сюрприз, на сей раз неприятный. make вываливается с ошибкой:
1 |
/usr/lib/gcc/i686-w64-mingw32/4.6.1/../../../../i686-w64-mingw32/bin/ld: cannot find -lQtGui
|
К сожалению, я не нашел, где поменять опции для ld, если кто знает, буду признателен за подсказку. А пока мы пойдем другим путем,
1 |
cd /usr/i686-w64-mingw32/sys-root/mingw/lib
|
Не знаю, чей это косяк, но факт в том, что для всех используемых кутишных либ нужно сделать симлинк без четверки. После этого все должно собраться и в папке release появится долгожданный exe'шник.
Ну, вроде, почти все. Осталось только скинуть в папку с exe'шником необходимые dll. К счастью, ничего конпелять не нужно, либы лежат по адресу /usr/i686-w64-mingw32/sys-root/mingw/bin/. Узнать, какие либы необходимы, быстрее всего с помощью wine:
1 |
|
На этом все. Я понимаю, что все это кажется большим и страшным, но соль в том, что настроив все это один раз, можно будет компилировать проекты под винду всего парой команд без необходимости держать последнюю. Удачи в программировании!
kozzy 05.09.2011 21:08 #
+ 2 -
Спасибо за статью!
а не дуалбутчик там какой-нибудь
как будто что-то плохое
если кому-то интересно, могу написать аналогичную статью по кроскомпиляции GTK2 (но особо не вижу в этом смысле, в интернетах подобн
добавлю +1 к статье о кросскомпиляции вообще
в .bashrc
function gcc-switch {
export NM=$1-nm
export LD=$1-ld
export CC=$1-gcc
export CXX=$1-g++
export RANLIB=$1-ranlib
export AR=$1-ar
export AS=$1-as
export STRIP=$1-strip
export OC=$1-objcopy
}
после чего переключение в текущей сессии происходит например
gcc-switch arm-eabi
или
gcc-switch i686-w64-mingw32
кроме того есть $CXXFLAGS (для g++) $CFLAGS (для gcc) $LDFLAGS (для LD), меняющие параметры сборки. для каждого toolchain они могут быть специфичны, но могут и совпадать
в .bashrc
function gcc-switch {
export NM=$1-nm
export LD=$1-ld
export CC=$1-gcc
export CXX=$1-g++
export RANLIB=$1-ranlib
export AR=$1-ar
export AS=$1-as
export STRIP=$1-strip
export OC=$1-objcopy
}
после чего переключение в текущей сессии происходит например
gcc-switch arm-eabi
или
gcc-switch i686-w64-mingw32
кроме того есть $CXXFLAGS (для g++) $CFLAGS (для gcc) $LDFLAGS (для LD), меняющие параметры сборки. для каждого toolchain они могут быть специфичны, но могут и совпадать