Cross-compiling for Windows
You can create Windows builds of OpenTTD on a non-windows platform by using a cross compiler suit. This tutorial will show how to use GCC that compiles for Windows but runs on *nix-es. These builds of OpenTTD can be shared to other Windows users, no need to install any extra stuff. If you are not familiar with compiling on *nix-es natively then first try Compiling on (GNU/)Linux and *BSD. There are also some similarities to Compiling on Windows using MinGW.
Note
Should work on any POSIX-like system including Linux, Mac OS X, Cygwin and many others although only Linux has been tested here.
Contents
MXE (M cross environment)
Preferred way of cross-compiling OpenTTD for Windows is to use MXE. It’s not flexible e.g. you will be limited to certain versions of libraries, but it saves a lot of trouble.
MXE is a set of scripts. It’ll download source code of the cross compiler and build it for your platform. Then it’ll download source code of libraries you chose and compile it for you using the cross compiler that was built by it’s own. Everything is automated (except of building OpenTTD itself).
Building MXE
First of all you might need to install some packages in your system. See «Requirements» section on MXE website. On 64-bit Ubuntu 14.10 you need:
autoconf automake autopoint bash bison bzip2 flex gettext git g++ gperf intltool libffi-dev libgdk-pixbuf2.0-dev libtool libltdl-dev libssl-dev libxml-parser-perl make openssl p7zip-full patch perl pkg-config python ruby scons sed unzip wget xz-utils g++-multilib libc6-dev-i386 libtool-bin
Download MXE from git repository. We will keep MXE under /usr/local/mxe. Compile the compiler and libraries. See also MXE tutorial.
Default is to create a suit that compiles for 32-bit Windows. You can also create 64-bit Windows suite by adjusting MXE_TARGETS option e.g. to create both the 32-bits (i686-w64-mingw32.static) and the 64-bits (x86_64-w64-mingw32.static) use:
Theoretically MXE should compile all libraries without problems. However, if you experience any, you may try tweaking some issues. See #Troubleshooting section.
Installing MXE
Add /usr/local/mxe/usr/bin to $PATH variable. See #Installing cross compiler manually for instructions.
Compiling OpenTTD
Compile OpenTTD using the cross compiler built by MXE.
Warning
See #Troubleshooting OpenTTD before continuing. You will probably be hit by the #OpenTTD with ICU 57 and earlier issue.
To build 64-bit OpenTTD just change i686 to x86_64 (don’t forget to set MXE_TARGETS when building MXE).
Now you should be ready to test with WINE:
Warning
Make sure you have the graphics or it may crash! See also #OpenTTD crashes on startup on WINE.
Compiling manually with MinGW
In this tutorial we will use MinGW-w64. It’s is a fork of MinGW. It has «active support toward 64-bit Windows API». It’s also suited to be used as a cross-compiler on *nix-es. We will use it almost like a regular GCC. Alternatively you can try using original MinGW. However, MinGW stopped supporting cross-compilation. See http://www.mingw.org/wiki/linuxcrossmingw for more info.
In this tutorial we will be using i686-w64-mingw32 cross compiler. If you want to use other, just change that string everywhere. Some of the possible values:
- i686-w64-mingw32 — MinGW-w64 32-bit Windows compiler
- x86_64-w64-mingw32 — MinGW-w64 64-bit Windows compiler
- i686-w64-mingw32.static — MXE 32-bit Windows compiler
- x86_64-w64-mingw32.static — MXE 64-bit Windows compiler
- i586-mingw32msvc — older MinGW 32-bit Windows compiler
In this tutorial we will manually compile all libraries used by OpenTTD. Tutorial works best with these exact versions of libraries which are present in the wget download links (though the #Troubleshooting section contains info about various library versions, especially various ICU versions). Some of the download links will eventually get obsolete. Visit homepage of a given library for latest download links. We will be installing our libraries under
Change that path if you wish other location.
If you are experiencing problems with a library you can always try building OpenTTD without one. Use —without-FEATURE configuration option to force disabling a certain library, though you will be left out from some functionality. Each library is responsible for something.
Installing MinGW-w64 cross compiler
Just install mingw-w64 package. Also usual compiler suit and pkg-config will be needed. On Debian-like systems:
Installing cross compiler manually
Alternatively you can try building from sources e.g. you can try older MinGW or MXE. After you do so, you must make compiler «visible» in your system. Adjust the $PATH environment variable e.g. if the compiler is /usr/local/myrcrosscompiler/bin/myrcrosscompiler-gcc then add /usr/local/myrcrosscompiler/bin to your $PATH:
Notice that this will affect only your current shell. Add it to something like .bashrc if you wish to make it permanent.
If you decide to modify $PATH permanently (through something .bashrc -like), this should have effect when sudo’ing (just don’t use -i option when running sudo ). However, if you don’t do this, be aware that $PATH will not be passed to sudo . You may need to pass it manually when invoking sudo e.g.
Testing cross compiler
If compiler is ready you should be able to obtain GCC version at command line:
Как установить компилятор gcc / g++ для Windows. Установка gcc
Время чтения: 5 минут
Для того, чтобы писать программы на C/C++ обычно достаточно установить какую-нибудь интерактивную среду разработки (IDE), например, Visual Studio или Eclipse, однако иногда (обычно в целях обучения студентов) требуется создавать программы в обыкновенном текстовом редакторе и компилировать приложение, используя консоль и компилятор gcc. В Unix системах он обычно установлен прямо «из коробки», а вот на Windows системах такой роскоши не наблюдается. Более того, у многих пользователей возникает множество проблем при установке компилятора. Поэтому нами было принято решение написать данную статью, чтобы помочь всем тем, кому пришлось или приходится мучаться с установкой этого компилятора на Windows.
Кстати, если вдруг на вашей Unix системе не установлен GCC, то поставить его можно командой sudo apt install gcc , введя свой пароль и согласившись на установку.
0. Прежде чем поставить компилятор GCC
Перед тем как приступить к установке этого компилятора на ваш компьютер, убедитесь в том, что GCC ещё не установлен на нём. Для этого откройте консоль (нажмите Win + R, введите в появившемся окне cmd и нажмите клавишу Enter) и введите следующую команду: gcc —version и нажмите Enter. Если компилятор уже установлен, то выполненная команда выдаст примерно следующую информацию:
Если в окне консоли появилось сообщение с версией компилятора и другая информация о GCC (второй скриншот), значит компилятор уже установлен и больше дополнительно ничего делать не нужно. А вот если вывод командной строки такой:
— значит GCC ещё не установлен в системе, поэтому двигаемся дальше.
1. Скачиваем установщик компилятора
Чтобы поставить GCC на операционную систему Windows, необходимо скачать установочный файл для него. Сделать это можно здесь: equation.com/servlet/equation.cmd?fa=fortran. Найдите в таблице версию компилятора, которая вам больше нравится (мы рекомендуем скачивать самую последнюю, на текущий момент — это версия 8.2.0) и скачайте установщик для вашей системы (32 или 64 бит).
2. Установка GCC
После того, как файл был скачан, откройте в проводнике папку, в которую был скачан установщик и запустите его, кликнув по файлу дважды левой кнопкой мыши. Появится окно, требующее подтверждения действия. В нём нужно выбрать да (иначе ничего ставиться не будет).
Установщик начнёт работу и отобразит окно с консолью, а также окно с бежевым фоном, в котором попросит прочесть и принять (или отклонить) лицензионное соглашение. Нажимаем Accept.
После этого установщик попросит выбрать путь для установки, предложив по умолчанию путь C:\mingw . Если вам категорически не нравится этот путь — измените его на более подходящий на ваш взгляд, в противном же случае просто нажмите Install.
Теперь остаётся только дождаться окончания распаковки архивов и установки их на компьютер. Как только все файлы будут установлены, инсталятор сообщит об этом, после чего нужно будет нажать на кнопку Finish.
3. Проверка установки
По завершении работы установщика перезагрузите компьютер и вновь откройте окно командной строки, введите команду gcc —version и нажмите Enter. На этот раз ответ от этой команды должен будет совпадать со вторым скриншотом из пункта 0. Если это не так, то скорее всего работа установщика была некорректно или преждевременно завершена, так что просто начните установку заново.
Поздравляем! Теперь на вашем компьютере установлен компилятор GCC и вы можете писать программы на языках C и C++, а компилировать их через командную строку!
4. Бонус. Компиляция программ с помощью GCC
Теперь, когда у вас установлен компилятор GCC, вы можете создавать программы на C/C++, используя только текстовый редактор и консоль. Для этого создайте новый файл и назовите его как угодно (например, hello_world). Задайте ему расширение .c вместо .txt . Напишите (или скопируйте) текст программы на С в этот файл. Откройте командную строку (Win + R, cmd) и введите следующую команду gcc hello_world.c и нажмите Enter. Если код не содержит ошибок, то результатом команды будет пустота. В противном же случае вы увидите все ошибки, который нашёл компилятор в программе с указанием места этой ошибки. При этом в проводнике появится файл a.out.exe , который будет являться исполняемым файлом для написанной программы. Чтобы запустить его введите в консоли a.out (для Unix-систем нужно писать ./a.out ) и нажмите Enter.
Что ещё за a.out? Непонятно!
По умолчанию при компиляции программ GCC в качестве результата создаём исполняемый файл с именем a.out (если такой уже есть, то b.out и т.д.). Это может быть не очень удобно, если у вас в папке лежит сразу много программ, которые нужно скомпилировать и затем запустить. Неудобно хотя бы тем, что разобраться, что такое a.out, а что такое b.out и c.out может быть непросто. Именно поэтому мы рекомендуем компилировать программы с явным указанием имени выходного файла. делается это так: gcc имя_файла.c -o имя_программы .
В результате выполнения такой программы вместо a.out будет создаваться файл с именем, заданным в имя_программы. Например, если для файла hello_world.c мы хотим получить программу hello, то компилировать нужно такой командой: gcc hello_world.c -o hello .
Используя понятные имена выходных программ (исполняемых файлов), вы гарантируете себе простоту работы и сокращение времени на разбирательство спустя долгое время.
Программист, сооснователь programforyou.ru, в постоянном поиске новых задач и алгоритмов
Языки программирования: Python, C, C++, Pascal, C#, Javascript
Выпускник МГУ им. М.В. Ломоносова
А Вы знаете, что мы пишем программы на C, C++, C#, Pascal и Python?
Так что если Вам нужно написать программу на C/C++, C#, Pascal или Python — мы с радостью поможем с этим!
В том числе мы занимаемся репетиторством по информатике и программированию, а также готовим к ОГЭ и ЕГЭ!
Почему именно мы?
- Более 1800 выполненных заказов;
- Более 170 отзывов;
- Качественное решение
- Короткие сроки и привлекательные цены
- Различные акции и скидки
Как с нами связаться?
Programforyou — доверяя нам писать программы, вы получаете качественное решение в короткие сроки по привлекательной цене!
Building GCC cross compiler (from “Linux” to “Windows”)
I want to build «gcc cross-compiler» to compile «c/c++» applications on «Linux» environment but for «Windows» target.
I have made this so far:
Installed the necessary tools and packages for building GCC listed on «Prerequisites for GCC» page.
Created this directory hierarchy:
«$
«$
«$
«$
Builded binutils package:
cd «$
../../binutils-2.19.1/configure —prefix=»$
make
make install
Copied «w32api» and «mingwrt» headers to the install directory:
cp -R «$
cp -R «$
And now when I am trying to build the «c (only) cross-compiler»:
it was building something about 4 minutes and then gives me these errors:
From that error message I really don’t know what to do now :-((( .
Does anybody know where is the problem?
Thanks.
3 Answers 3
That’s actually OK: the way things go, you need to
- build binutils
- install headers
- build the a partial C compiler: enough to create object files, but not enough to link
- build the win32api and mingw runtime (which includes your missing dllcrt2.o )
- build a complete C compiler (and other front-ends, such as C++, Fortran, Ada, whatever, if you want them)
You have successful performed step 3 above; it fails building libgcc (which is a GCC support library), but that means the C compiler core is functionnal (although it won’t be able to link, it can still create valid object files). You can check that by looking at the gcc/xgcc file in your GCC build directory.
So, you need to go to the next step, not worrying about your current failure.
(To actuall install the partial C compiler, you should run make with the -k option, to have it do it best, even in the face of errors. For example, use make -k install .)