IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> [Ada, GNAT] Как установить и скомпилировать для Windows x64, TDM-GCC, gprbuild, MinGW64
сообщение
Сообщение #1


Большевик–концептуал
***

Группа: Пользователи
Сообщений: 194
Пол: Мужской
Реальное имя: Иван Левашев
Jabber: bu_gen@octagram.name
Skype: i.levashew
QQ: 3152538431
WeChat
Ада: Сторонник
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик
Turbo Pascal: Установлен

Репутация: -  1  +


Всегда пользовался GNAT GPL. Знал про существование чего-то другого, и даже в шапке оно висит, та самая версия TDM-GCC без ограничений GPL и с возможностью собрать в Win64. Однажды-таки понадобилась.

Во-первых, достаточно просто было воспользоваться онлайн установщиком tdm-gcc-webdl.exe. Меня смущал выбор всяких seh, sjlj, dwarf2, а онлайн-установщик этим тяжёлым выбором мозг не парит, просто качает, что нужно. При установке можно выбрать или 32-битный компилятор, или 64-битный, но с возможностью компилировать в 32-бита по ключу -m32. Пользоваться этим ключом всё же не просто, если компилировать библиотеки из всяких разных мест с самыми разными системами сборки, поэтому имеет смысл поставить в разные каталоги компиляторы с разной битностью. Компилятор Ады по умолчанию не ставится, но в установщике можно в опциях галочку найти для GNAT, и всё пройдёт успешно. В установщике есть выбор зеркала, вот тут какая-то проблема. Мне ближе всего оказалось зеркало в Казахтане, space.kz, но как-то так интересно вышло, что с этого зеркала скачать файлы установщик не смог. Пришлось запускать заново, опять ставить галочку и выбирать другое зеркало. В общем, space.kz — это бяка, или я не знаю, что с ним не так.

Далее, для сборки я привык пользоваться gprbuild. И если GNAT входит в состав GCC и поэтому попадает в состав и TDM-GCC, и дистрибутивов Linux, и т. п., то про gprbuild, gprmake или хотя бы gnatmake такого сказать нельзя. В моём случае у меня уже установлен GNAT GPL 2016, поэтому я просто пользуюсь gprbuild оттуда, но с сайта AdaCore можно скачать gprbuild отдельно. Вот, например, прямая ссылка: gprbuild-gpl-2016-x86-windows-bin.exe (4.43 MB), чтоб не качать полный дистрибутив GNAT GPL.

Это удобная система сборки, она позволяет собирать смешанные проекты на Ada, C и C++, и потенциально можно научить другим языкам программирования. В любой момент к адскому прокету можно добавить сишных или плюсовых исходников, и gprbuild знает, что с ними делать. Так, однажды мне потребовалось воспользоваться libbzip2 в режиме сжатия, а Zip-Ada умеет только разжимать этот формат и не подходит. Добавил исходники libbzip2 в проект, написал пакеты с импортами, и всё срослось.

Для C и C++ эта утилита умеет автоматически генерировать дерево зависимостей, и автоматически пересобирать только изменившееся аналогично тому, как это делается в Ada, Delphi и других языках программирования с развитой модульной системой. Также эта утилита знает, как делать статические и динамические библиотеки, и всё это кроссплатформенно. Если кто пытался это сделать вручную, знает, как это нетривиально. Не так давно я настрадался с CMake-gui, который я вообще не понял. У него в меню «File» нет привычных «Save» и «Load», а вместо этого какой-то кеш, который можно удалять, обновлять, и это всё, что можно сделать.

Собственно, в моём случае задача начинается именно с C++, и мне нужно иметь готовое решение именно этих проблем, отслеживание зависимостей и кроссплатформенную систему сборки, так что почему бы не gprbuild.

Установленный из GNAT GPL 2016 gprbuild, разумеется, настроен именно на этот компилятор (32-битный), а мне нужно было перенастроить на 64-битный TDM-GCC в другой директории. Сделать это оказалось совсем не сложно. Следуя инструкциям, я понял, что можно автоматически сгенерировать конфигурацию средствами gprconfig. Для начала посмотрел, что он умеет:

>gprconfig --show-targets
List of targets supported by a compiler:
i686-pc-mingw32 (native target)
i386-mingw32
x86_64-w64-mingw32



Были опасения, что он покажет только тот компилятор, вместе с которым установлен, но нет, он увидел в PATH всё, что есть. x86_64-w64-mingw32 — вот он, родимый. Раз такое дело, то попытался им создать файл конфигурации:

…>gprconfig "--target=x86_64-w64-mingw32"
--------------------------------------------------
gprconfig has found the following compilers on your PATH.
Only those matching the target and the selected compilers are displayed.
1. GNAT for Ada in c:\gnat\tdm-gcc-64-2017-01-07\bin\ version 5.1 (default runtime)
2. GCC-ASM for Asm in c:\gnat\tdm-gcc-64-2017-01-07\bin\ version 5.1.0
3. GCC-ASM for Asm2 in c:\gnat\tdm-gcc-64-2017-01-07\bin\ version 5.1.0
4. GCC-ASM for Asm_Cpp in c:\gnat\tdm-gcc-64-2017-01-07\bin\ version 5.1.0
5. GCC for C in c:\gnat\tdm-gcc-64-2017-01-07\bin\ version 5.1.0
6. G++ for C++ in c:\gnat\tdm-gcc-64-2017-01-07\bin\ version 5.1.0
7. GFORTRAN for Fortran in c:\gnat\tdm-gcc-64-2017-01-07\bin\ version 5.1.0
8. WINDRES for WinRes in c:\gnat\tdm-gcc-64-2017-01-07\bin\ version 2.25
Select or unselect the following compiler (or "s" to save): 1



И так, выбрал всё подряд, от 1 до 8, а затем «s» для сохранения. Файл сохранился в текущей директории, то есть, в проекте, под именем x86_64-w64-mingw32.cgpr. Теперь оставалось только проверить, работает ли это все?

…>gprbuild "--config=x86_64-w64-mingw32.cgpr" -PKey_SQL.gpr
Key_SQL.gpr:1:09: warning: there are no Ada sources in this project
g++ -c Key_SQL.Main.cpp
windres -i Key_SQL.Win_Res.rc
ar cr libkey_sql.a ...
ranlib libkey_sql.a
g++ key_sql.main.o -o Key_SQL.exe

…>Key_SQL.exe
Hello, World!



И это действительно 64-битный файл собрался. Таким образом, поставить TDM-GCC с поддержкой Ады достаточно несложно, и достаточно несложно потом научить gprbuild работать с чужим компилятором.

Добавлено. Нет, всё же кое-где автоматика gprconfig не справилась. Там у каких-то утилит прописываются пути, а каких-то нет. И получается, что 64-битные объектные файлы замечательно пакуются в 32-битные статические библиотеки, и даже список файлов в такой библиотеке можно посмотреть, только символические имена почему-то не резолвятся.

Значит, cgpr надо потом открыть, и пути точные прописать в этих местах:
Код

   for Archive_Builder  use ("c:\gnat\tdm-gcc-64-2017-01-07\bin\ar", "cr");

   for Archive_Indexer  use ("c:\gnat\tdm-gcc-64-2017-01-07\bin\ranlib");

      for Driver ("WinRes") use "c:\gnat\tdm-gcc-64-2017-01-07\bin\windres";


Хотя если у вас всего один компилятор на машине, таких проблем не будет.


--------------------
If you want to get to the top, you have to start at the bottom
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.04.2024 13:14
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name