Как скомпилировать программу для Windows в linux

Если вдруг понадобится на линуксе кросскомпилить бинарник под Windows, вот инструкция:

$ sudo apt install mingw-w64
$ i686-w64-mingw32-g++ -static-libgcc -static-libstdc++ FILE.cpp
где FILE.cpp — файл с компилируемым кодом

Да, и еще сначала из непонятно чего FILE.cpp перевести в UTF-8, иначе компиляторы сходят с ума (в Kate: Файл->Сохранить в другой кодировке).

Статическая линковка (-static-libgcc -static-libstdc++) нужна, чтобы не было ошибок, как на скриншоте. i686-w64-mingw32-g++ скомпилирует 32-битный исполняемый файл из кода на C++, в той же папке на выходе будет файл a.exe, с помощью команды
$ file a.exe
можно убедиться, что это действительно, например, «PE32 executable (console) Intel 80386, for MS Windows».
i686-w64-mingw32-gcc скомпилирует код на Си.

Источник: nixtux.ru

::UsefulBytes

Кратко расскажу как создать так называемый cross-compile toolchain для компиляции Windows-программ из под Linux. Cross-compile toolchain — это набор средств для создания приложений для целевой платформы не имея собственно самой целевой платформы. Обычно это используется при сборке программ под различные экзотические платформы, в данном случае такой целевой платформой выступает далеко не экзотическая Windows. Термин «целевая платформа» уже прозвучал, помимо него имеется еще термин «хост-платформа» (или «платформа сборки»), думаю их значение пояснять не нужно.

Компиляция кода на Си с помощью gcc на Linux Mint 20


Хватит рассуждать пора делом заниматься, привожу краткую инструкцию в результате которой вы получите готовый инструмент для сборки С/С++ программ для Windows непосредственно в Linux. Используя инструкцию собрал toolchain в ArchLinux и CentOS 5.3, после собрал с помощью него MinGW32 для Windows с последним GCC 4.4.1 с поддержкой C/C++ прямо в Linux. В итоге остался очень доволен и получил ценный опыт, которым собираюсь поделиться с вами.

Читайте также:
Программа для исправления звука на Виндовс 10

Перед тем как непосредственно приступить убедитесь что у вас установлены средства разработки, такие как GCC, G++, CVS, Automake, Autoconf, make и т.п. Если что-то не сработает в ходе выполнения инструкции — возможно в системе не хватило каких-то пакетов. Если вы занимаетесь разработкой на C/C++ то скорее всего все эти пакеты в вашей системе уже установлены.

Первым делом получим последние версии MinGW Win32 API и MinGW Win32 Runtime:


Теперь скачаем Binutils, GCC, GCC-G++, GMP и MPFR:

wget http://ftp.gnu.org/gnu/binutils/binutils-2.19.1.tar.bz2
wget http://gcc-uk.internet.bs/releases/gcc-4.4.1/gcc-core-4.4.1.tar.bz2
wget http://gcc-uk.internet.bs/releases/gcc-4.4.1/gcc-g++-4.4.1.tar.bz2
wget ftp://ftp.gnu.org/gnu/gmp/gmp-4.3.1.tar.bz2
wget http://www.mpfr.org/mpfr-current/mpfr-2.4.1.tar.bz2

Распакуем все что скачали:
tar xjf binutils-2.19.1.tar.bz2
tar xjf gcc-core-4.4.1.tar.bz2

Обзор WINE для Linux. Можно запускать приложения Windows без суеты!


tar xjf gcc-g++-4.4.1.tar.bz2
tar xjf gmp-4.3.1.tar.bz2
tar xjf mpfr-2.4.1.tar.bz2

Начнем со сборки и установки Binutils для целевой платформы:
cd binutils-2.19.1
mkdir build cd build
../configure —target=i686-pc-mingw32 —disable-multilib
make
sudo make install
cd ../..

make install установит собранные бинарники в /usr/local/i686-pc-mingw32
Для дальнейшей сборки надо скопировать заголовочные файлы MinGW в папку куда будут устанавливаться файлы для целевой архитектуры:

sudo cp -r mingwrt/include /usr/local/i686-pc-mingw32
sudo cp -r w32api/include /usr/local/i686-pc-mingw32

Если в переменной окружения PATH у вас отсутствует путь /usr/local/bin — добавте его:
export PATH=»/usr/local/bin:$PATH»

Теперь соберем и установим GCC с ключом -gcc (предварительно сделаем ссылки на GMP и MPFR, чтобы они тоже собрались):

cd gcc-4.4.1
ln -s ../gmp-4.3.1 gmp
ln -s ../mpfr-2.4.1 mpfr
mkdir build cd build
../configure —target=i686-pc-mingw32 —disable-multilib
make all-gcc
sudo make install-gcc
cd ../..

Понадобятся библиотеки из MinGW API:
cd w32api
mkdir build cd build
../configure —host=i686-pc-mingw32 —prefix=/usr/local/i686-pc-mingw32
make
sudo make install
cd ../..

Читайте также:
Программа для убрать стрелки на ярлыках Windows 7

К сожалению тут идет неприятная часть с кросс-зависимостями между GCC и MinGW Runtime, которая, впрочем, решается довольно просто. Мы повторно собираем GCC но уже с ключом all:

cd gcc-4.4.1/build
make

Сборка завершится с ошибкой, но нам это не важно, главное были собраны необходимые библиотеки, которые понадобятся для сборки MinGW Runtime, скопируем их в папку целевой платформы:

sudo cp i686-pc-mingw32/libgcc/crtbegin.o i686-pc-mingw32/libgcc/crtend.o
i686-pc-mingw32/libgcc/libgcc_eh.a i686-pc-mingw32/libgcc/libgcc.a
/usr/local/i686-pc-mingw32/lib/
cd ../..

Теперь можно собрать и установить MinGW Runtime:
cd mingwrt
mkdir build cd build
../configure —host=i686-pc-mingw32 —prefix=/usr/local/i686-pc-mingw32
make
sudo make install
cd ../..

Возвращаемся к сборке GCC, теперь все должно собраться нормально:
cd gcc-4.4.1/build
make
sudo make install
cd ../..

Ну вот и все, cross-compile toolchain готов, можете приступать к сборке нативных Windows-приложений не выходя из Linux. В качестве компилятора для C используйте i686-pc-mingw32-gcc и для C++ используйте i686-pc-mingw32-g++. Для autoconf скриптов configure достаточно указать опции —host=i686-pc-mingw32 и —target=i686-pc-mingw32, тогда скрипт сам определит нужные программы и по возможности попытается собрать весь проект для запуска на целевой платформе, именно так собирается GCC 4.4.1 для запуска в Windows, но об этом в другой раз. Удачных сборок 🙂

Источник: usefulbytes.blogspot.com

Компиляция приложений Windows в Linux

Одна из потрясающих особенностей Linux состоит в том, что, работая в нем, вы можете создавать приложения Windows. Такую возможность обеспечивает пакет mingw-w64. В его состав входят компиляторы для создания 32- и 64-битного кода С и С++ для систем Windows. После установки пакета mingw-w64 генерация кода Windows осуществляется следующим образом:

# C i686-w64-mingw32-gcc hello.c -o hello32.exe # 32-bit x86_64-w64-mingw32-gcc hello.c -o hello64.exe # 64-bit # C++ i686-w64-mingw32-g++ hello.cc -o hello32.exe # 32-bit x86_64-w64-mingw32-g++ hello.cc -o hello64.exe # 64-bit

Читайте также:
Необходимые программы для Windows 10 для игр

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

Компилируемые программы на C будут зависеть от библиотек kernel32.dll и msvcrt.dll. Первая является неотъемлемой частью ОС Windows. Вторая представляет собой стандартную библиотеку времени выполнения C от компании Microsoft и обычно также входит в состав ее операционной системы.

Программы на C++ будут также зависеть от библиотек libstdC++-6.dll и libgcc_s_sjlj-1.dll. Это библиотеки компиляторов Mingw. Они находятся в каталоге /usr/lib/gcc/x86_64-w64-mingw32/. Для того, чтобы статически включить их в состав вашего исполняемого модуля укажите при компиляции ключи:

-static-libgcc -static-libstdc++

P.S. при написании этого поста использовались материалы блога arrayfire (точнее статьи).

P.P.S. кто-нибудь может назвать мне хотя бы один компилятор в Windows, позволяющий создавать двоичный код для Linux?

Источник: norseev.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru