Показаны сообщения с ярлыком cross compiling. Показать все сообщения
Показаны сообщения с ярлыком cross compiling. Показать все сообщения

воскресенье, 1 мая 2011 г.

Настройка CodeBlocks для компиляции wxWidgets / Win32 приложений для Windows компилятором Mingw32 из под Linux/FreeBSD

Установка CodeBlocks из портов:

portinstall codeblocks


Запускаем CodeBlocks, далее меню "Settings" -> "Compiler and Debugger" -> "Selected compiler"
"GNU GCC Compiler" -> "Copy"
задаем имя компилятора "MinGW32 Compiler"

Для этого компилятора задаём:
в "#defines"

WINVER=0x0400
__WIN95__
__GNUWIN32__
STRICT
HAVE_W32API_H
__WXMSW__
__WINDOWS__

в "Toolchain executables" пропишем
"Compiler's installation directory" ~/mingw-cross-env/usr или что там у вас.








"C compiler:"i686-pc-mingw32-gcc
"C++ compiler:"i686-pc-mingw32-g++
"Linker for dynamic libs:"i686-pc-mingw32-g++
"Linker for static libs:" i686-pc-mingw32-ar
"Debugger:"i686-pc-mingw32-gdb
"Resorce compiler:"i686-pc-mingw32-windres
"Make program:"make

По поводу i686-pc-mingw32-gdb, надо создать скрипт ~/mingw-cross-env/usr/bin/i686-pc-mingw32-gdb

cd ~/mingw-cross-env
make gdb
touch ~/mingw-cross-env/usr/bin/i686-pc-mingw32-gdb
echo '#!/bin/csh' >> ~/mingw-cross-env/usr/bin/i686-pc-mingw32-gdb
echo 'wine ~/mingw-cross-env/usr/i686-pc-mingw32/bin/gdb.exe "$@"' >> ~/mingw-cross-env/usr/bin/i686-pc-mingw32-gdb
chmod +x ~/mingw-cross-env/usr/bin/i686-pc-mingw32-gdb



Да и ещё, некоторые общие настройки, хотя и без них wxWidgets приложение соберется, прописать в
"Other Linker Options":
-lstdc++
-lgcc
-lodbc32
-lwsock32
-lwinspool
-lwinmm
-lshell32
-lcomctl32
-lctl3d32
-lodbc32
-ladvapi32
-lodbc32
-lwsock32
-lopengl32
-lglu32
-lole32
-loleaut32
-luuid

Прописать в "Search directories"
Для Compiler путь к include: ~/mingw-cross-env/usr/i686-pc-mingw32/include
Для Linker путь к lib: ~/mingw-cross-env/usr/i686-pc-mingw32/lib
Для Resource compiler: ~/mingw-cross-env/usr/i686-pc-mingw32/include

Жмём "OK"

Из под su, делал так:
ln -s /usr/local/bin/wine /usr/local/bin/wine-auto

При создании нового проекта, надо выбирать "MinGW32 Compiler"
Для новых wxWidgets проектов надо прописывать:
В "Project build options" пропишем
в "Other options":

`i686-pc-mingw32-wx-config --cxxflags`


в "Other linker options:"

`i686-pc-mingw32-wx-config --libs`



Если использовать мастер для создания проекта, то надо wx-config заменить на i686-pc-mingw32-wx-config, для этого можно открыть Ваш файл проекта CodeBlocks (*.cbp) в обычном текстовом редакторе, например, gedit и произвести замену.

Имеются некоторые проблемы при запуске программ после сборки из CodeBlocks, но в общем можно запустить с отладчиком, правда CodeBlocks 10.05 может "рухнуть", было один раз.

В общем, то и все, можно правда некоторые опции компилятора задействовать, например -s, что делает strip, уменьшая размер исполняемого файла.

суббота, 30 апреля 2011 г.

Компилируем wxWidgets приложение для Windows из под FreeBSD

Можно скомпилировать приложение minimal из примеров, поставляемых вместе с wxWidgets.
Использовать будем mingw-cross-env, да к стати из портов можно установить mercurial, чтоб установить последнюю версию mingw-cross-env для этого запускаем:

hg clone http://hg.savannah.nongnu.org/hgweb/mingw-cross-env

Чтоб добыть обновления, запускаем:

hg pull -u


В общем после установки wxwidgets, т.е. после выполнения команд:

cd mingw-cross-env
gmake wxwidgets


В директории с кодом простого wxWidgets приложения выполним:

i686-pc-mingw32-g++ minimal.cpp -o minimal.exe `i686-pc-mingw32-wx-config --cxxflags --libs`

В текущей директории появляется minimal.exe, правда его размер несколько впечатляет почти 7 Мбайт. Можно его уменьшить командой:

i686-pc-mingw32-strip minimal.exe

Почти в два раза.

wine minimal.exe

При записке minimal.exe под Windows 98 , а также wine, при условии, что там в настройках (команда winecfg) стоит Windows 98, может вылести сообщение "wxWidgets Fatal Error\n This program uses Unicode and requires Windows NT/2000/XP ...". Ничего страшного, можно просто перекомпилировать minimal.cpp без поддержки Unicode.

i686-pc-mingw32-g++ minimal.cpp -o minimal.exe `i686-pc-mingw32-wx-config -nounicode --cxxflags --libs`


Об опциях i686-pc-mingw32-wx-config можно узнать командой:

i686-pc-mingw32-wx-config

правда не все опции могут в действительности дать желаемый эффект, например, думал, что опция --release уменьшит размер файла за счет исключения отладочной информации, ну да ладно, strip есть.

суббота, 23 апреля 2011 г.

Компиляция для Windows из под FreeBSD

Ставил mingw32 из портов, результат не очень.
Но вот набрел на страницу http://mingw-cross-env.nongnu.org
Сделал:
В FreeBSD должно быть установлено: automake111 autoconf268 bash bison cmake flex gmake gsed intltool libtool openssl patch perl p5-XML-Parser pkg-config scons unzip wget yasm
И ещё wine для проверки работоспособности кода.

0. cd ~/mingw32
1. wget https://bitbucket.org/vog/mingw-cross-env/downloads/mingw-cross-env-2.20.tar.gz
2. tar -xzvf mingw-cross-env-2.20.tar.gz
3. cd mingw-cross-env-2.20
4. gmake download-gcc
Возможны проблемы с загрузкой этой командой, но можно и скачать обычным способом. То, что не сможет через скрипт скачать, можно подсмотреть в папке pkg, потестив архивы, можно ещё подсмотреть откуда качает в директории src , найдя соответствующий .mk файл
5. gmake gcc
можно приписать и другие порты после gcc, например, gmake gcc gdb и т.д.
6. редактирую ~/.cshrc , добавляю строку :
setenv PATH ~/mingw/mingw-cross-env-2.20/bin:$PATH
так как использую SHELL=csh,
для SHELL=bash в файле ~/.profile можно прописать:
export PATH = ~/mingw/mingw-cross-env-2.20/bin:$PATH
7. Компилить прогу написанную на Си можно так
i686-pc-mingw32-gcc -o main.exe main.c
8. А, запускать так
wine main.exe