Процесс компиляции программ на c++

Введение

Что же у нас есть для кросс-компиляции? Если не считать коммерческих продуктов и мелких поделок, то для того, чтобы скомпилировать любой проект под любую платформу, понадобится Gnu Compiler Collection, или, кратко, GCC. GCC — это один большой набор исходников, но собирать из него кросс-компилятор на каждую новую целевую платформу придётся отдельно.

Надо сказать, список целевых платформ довольно внушителен.

Вообще, для того, чтобы работать с GGC надо собрать т. н. Toolchain, набор утилит для компиляции. В toolchain входит помимно GCC, ещё Binutils, предназначенные для манипуляций с объектными и бинарными файлами. Для голого железа (если планируется работать не под ОС на целевой платформы, весьма полезной будет также NewLib — сборник стандартных процедур.

Binutils

В Binutils входят:

addr2line
Утилита определения места в исходнике по адресу.
ar
Утилита работы с объектными архивами.
c++filt
Дешифратор имён перегруженных функций и методов для языков C++ и Java.
dlltool
Генератор файлов для сборки и использования DLL.
gprof
Профилировщик.
libtool
Библиотекарь — утилита для работы с динамическими и статическими библиотеками.
nlmconv
Конвертер объектных файлов в NLM.
nm
Генератор списка символов.
objcopy
Копировщик и преобразователь объектных файлов.
objdump
Утилита вывода информации по объектным файлам.
ranlib
Утилита индексирования объектных архивов.
readelf
Утилита вывода информации по ELF-файлам.
size
Измеритель размера секций и программ в целом.
strings
Извлекатель символьных строк из объектных файлов.
strip
Утилита для отфильтровывания символических имён, отладочной информации из бинарных файлов.
windmc
Компилятор файлов сообщений для Windows.
windres
Компилятор ресурсов Windows.

GCC

В составе GCC большой набор разнообразных инструментов, однако, скорее всего иметь дело придётся с frontend, который так и называется, gcc. Он сам определяет тип исходного файла и вызывает соответствующий компилятор, а также, по необходимости, линковщик или библиотекарь.

NewLib

NewLib — специальная подборка стандартных функций для встраиваемых систем. Она включает в себя libc (функци работы со строками, файлами и т. д.), libm (разнообразные математические функции). Также она обладает широкими возможностями конфигурирования под разнообразные требования.

Надо сказать, NewLib далеко не единственный выбор. В принципе, если не пользоваться библиотечными функциями, можно вообще без библиотек обойтись, но этот путь сложен и тернист — стандарт си не требует наличия их в т. н. standalone environment. Вполне возможно, есть другие подходящие варианты

GDB

GNU Debugger — стандартное средство отладки программ, и, в принципе, необязательно. Возможно, вы предпочтёте графический отладчик или вовсе пользуетесь исключительно printf-style-debug.

Введение

Один из самых распространённых компиляторов с языков C и C++ на многих современных Unix-подобных системах, таких как GNU/Linux, члены семейства систем BSD и Mac OS X, это GCC. Первоначально эта аббревиатура расшифровывалась как GNU C Compiler (компилятор языка C от организации GNU), в свою очередь GNU является «рекурсивным акронимом», то есть расшифровывается через самое себя: GNU=GNU is Not UNIX, имея ввиду свою открытость в отличие от оригинальных систем UNIX (таких как UNIX System V от компании AT&T и BSD UNIX, разрабатывавшемся в Университете Беркли, Калифорния). После его появления в 1987 году к GCC был дописан ряд фронт-ендов (front-ends, трансляторов исходных кодов во внутреннее представление GCC, рассчитанное на дальнейшую трансляцию в исполняемый двоичный код бек-ендом, back-end) для других языков программирования:

  • C++,
  • Objective-C,
  • Objective-C++,
  • Fortran,
  • Java,
  • Ada,

Простейший способ задействовать средства GCC — выполнить в командной строке команду:

$ gcc имя_файла

$‘.C’, ‘.cc’, ‘.cpp’, ‘.CPP’, ‘.c++’, ‘.cp’ или ‘.cxx’;
‘.hh’, ‘.hpp’, ‘.H’, или (иногда для разделяемого шаблонного кода) ‘.tcc’

$ gcc имя_файла -x тип
  • c c-header c-cpp-output
  • c++ c++-header c++-cpp-output
  • objective-c objective-c-header objective-c-cpp-output
  • objective-c++ objective-c++-header objective-c++-cpp-output
  • assembler assembler-with-cpp
  • ada
  • f95 f95-cpp-input
  • java
  • treelang
$ gcc -v
// first.cpp
#include <iostream>

int main() {
    std::cout << "Здравствуй, Мир!" << std::endl;
}
$ gcc ./first.cpp
/tmp/cc6dArpT.o: In function `main':
first.cpp:(.text+0x1c): undefined reference to `std::cout'
first.cpp:(.text+0x21): undefined reference to `std::basic_ostream >& std::operator >(std::basic_ostream >&, char const*)'
first.cpp:(.text+0x29): undefined reference to `std::basic_ostream >& std::endl >(std::basic_ostream >&)'
first.cpp:(.text+0x31): undefined reference to `std::basic_ostream >::operator >& (*)(std::basic_ostream >&))'
/tmp/cc6dArpT.o: In function `__static_initialization_and_destruction_0(int, int)':
first.cpp:(.text+0x60): undefined reference to `std::ios_base::Init::Init()'
first.cpp:(.text+0x65): undefined reference to `std::ios_base::Init::~Init()'
/tmp/cc6dArpT.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: выполнение ld завершилось с кодом возврата 1
$ ls
first.cpp

std::coutgcc

$ gcc ./first.cpp -lstdc++
$ ls
a.out  first.cpp
$ ./a.out 
Здравствуй, Мир!

-lgcc

$ rm ./a.out 
$ g++ ./first.cpp 
$ ls
a.out  first.cpp

g++

Если имя ‘a.out’ кажется вам не очень выразительным, то вы наверняка захотите указать другое, делается это так:

$ g++ ./first.cpp -o helloworld
$ ls
first.cpp  helloworld

Приведённые выше примеры должны натолкнуть на мысль о том, что поведением компилятора можно управлять посредством ключей (наподобие -l, -o). На самом деле, искусство использования конкретного компилятора на конкретных платформах определяется умением использовать такой набор ключей компиляции, который позволит создавать корректные и максимально эффективные программы по возможности быстро. Мы познакомимся с несколькими группами ключей GCC, приближающими к этой цели.

Процесс компиляции и сборки программ в Unix

Создание исполняемого файла из одиночного файла .c выглядит довольно просто.
Сначала .c-файл компилируется в объектный код (файл .o — «object»), который
затем при помощи сборщика (loader; его еще называют линкером — linker) с
добавлением системных библиотек превращается собственно в исполняемый файл.

Создание программы из одного исходного
файла

Большинство же программ состоят из нескольких исходных файлов (крупные
программы содержат по несколько сотен и даже тысяч файлов). Эти файлы также
компилируются в объектный код, а потом сборщик делает из них исполняемый файл.

Создание крупной
программы

Многие пакеты состоят из нескольких исполняемых файлов, в этом случае каждый
из них собирается точно так же. При этом многие пакеты содержат собственные
библиотеки, которые также компилируются из исходных текстов в объектные файлы
(совершенно аналогично обычным исходным файлам — на рисунке это показано
упрощенно для экономии места) и затем при помощи программы-библиотекаря
(archiver) собираются в т.н. архивы — файлы .a.

Компиляторы языка Си в Unix обычно называются cc (C Compiler), а
зачастую (особенно в Linux) используется т.н. GNU C Compiler — gcc.
Компиляторы Си++ аналогично называются c++ и g++. Сборщики
именуются ld, хотя можно для этих целей пользоваться и gcc.
Библиотекарь-архиватор — программа ar.

Как и почему

Почему бы не устанавливать в

Две причины:

  1. Во-первых, согласно Стандарту Файловой Иерархии, эти файлы просто принадлежат . И точка!
  2. Во-вторых, установка в является последней мерой, когда другой опции нет.

What is that out-of-path executables thing?

Эта статья или раздел нуждается в

This weird thing allows easier cross-compiling. Sometimes, project Makefiles do not use & co. variables and instead use gcc directly. If you just want to try to cross-compile such project, editing the Makefile could be a very lengthy operation. However, changing the to use «our» executables first is a very quick solution. You would then run instead of .

Метод 1 из 3: Используйте компилятор GNU-GCC в Linux или Unix

  1. Откройте терминал. Нажмите клавиши одновременно Ctrl+Alt+T из вашего рабочего стола. Вы также можете открыть терминал из меню загрузки вашей системы.
  2. Убедитесь, что GNU-GCC установлен в вашей системе. вводить gcc - версия затем нажмите клавишу запись, Эта команда отобразит номер версии вашего компилятора C. Если система сообщит вам, что команда не была найдена, скорее всего, компилятор GCC не установлен.
    • Если компилятор на самом деле не установлен в вашей системе, обратитесь к документации по вашему дистрибутиву Linux для получения информации о том, как получить соответствующие пакеты программного обеспечения.
    • Если исходный код для компиляции написан на C ++, вам придется использовать команду г ++ вместо НКУ.
  3. Перейдите в каталог, где находится ваш исходный код.

    Если ваш исходный файл называется main.c и находится в репертуаре ~ / Проекты / программы / источникивведите команду cd ~ / projects / program / source позиционировать себя в этой папке.

  4. Скомпилируйте вашу программу. Вызвать команду gcc main.c -o привет, замещать main.c по имени файла исходного кода резака и привет той, которую вы хотите дать вашей окончательной программе. Gcc затем скомпилирует main.c.
    • Если были отображены ошибки, и вы хотели получить более подробную информацию о них, перекомпилируйте вашу программу, вызвав команду gcc -Wall -o errorlog main.c, Компилятор сохранит их в файл e, который вы можете просмотреть с помощью команды журнал ошибок кота.
    • Вызвать команду gcc -o fileobject file1.c file2.c file3.c компилировать программа, состоящая из несколько файлы исходного кода.
    • Компилировать за один раз несколько программы, состоящие из несколько файлы исходного кода, вызовите команду gcc -c file1.c file2.c file3.c.
  5. Попробуйте программу, которую вы только что скомпилировали. Введите команду ./bonjour с последующим запись запустить его, думая о замене привет по имени, которое вы дали своей программе.

Что такое компилятор C++?

Итак, давайте начнем с основ. Любой компьютер понимает только машинный код или ассемблер, который состоит из нулей и единиц. Это самый низкий, базовый уровень работы компьютера. Однако программировать таким образом весьма сложно и неудобно. Даже использовать низкоуровневый ассемблер — это то еще удовольствие. Хотя, впрочем, на нем есть даже своя операционная система.

Однако большинство разработчиков предпочитают высокоуровневые языки программирования, такие как C++. «Высокий уровень» означает, что они работают на уровне операционной системы, а не машинных кодов. И вот именно компилятор обеспечивает взаимодействие между кодом на C++ или любом другом высокоуровневом языке, и собственно, машинным кодом. Это утилита-посредник, которая обеспечивает преобразование вот такого кода:

#include <iostream>
int main() {
    std::cout << "Hello World!";
    return 0;
}

Примерно в такой, понятный процессору:

 global _main
    extern  
    extern  
    extern  

    section .text
_main:
    ; DWORD  bytes;    
    mov     ebp, esp
    sub     esp, 4

    ; hStdOut = GetstdHandle( STD_OUTPUT_HANDLE)
    push    -11
    call    
    mov     ebx, eax    

    ; WriteFile( hstdOut, message, length(message), &bytes, 0);
    push    0
    lea     eax, 
    push    eax
    push    (message_end - message)
    push    message
    push    ebx
    call    

    ; ExitProcess(0)
    push    0
    call    

    ; never here
    hlt
message:
    db      'Hello, World', 10
message_end:

Подобным образом работают и другие языки, к примеру, Python, JavaScript и так далее. Только они преобразовываются сначала в C++, а уже затем в ассемблерные коды.

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

Шаг 3 — Установка MariaDB

Теперь добавьте MariaDB в стек сервера. Для надлежащей работы ERPNext 12 требуется MariaDB 10.2+. Поскольку Ubuntu 20.04 включает MariaDB 10.3 в свои официальные репозитории, вы можете установить эту версию с помощью команды :

Также, если вы предпочитаете более новую версию MariaDB, можно следовать . Он проведет вас по шагам мастера онлайн-репозитория MariaDB, который поможет установить новейшую версию — MariaDB 10.5.

После установки установите следующие пакеты:

ERPNext 12 — это приложение Python, поэтому для управления базой данных требуется библиотека . требуется для доступа к определенным функциям разработчика MariaDB.

Затем добавьте дополнительный слой безопасности на сервер MariaDB, запустив скрипт :

Скрипт будет давать подсказки с помощью вопросов:

  • В первом диалоговом окне вам будет предложено ввести пароль root, но так как пароль еще не задан, нажмите .
  • Затем при запросе изменить пароль root MariaDB ответьте . Использование пароля по умолчанию и аутентификации Unix — это рекомендуемая настройка для систем на базе Ubuntu, поскольку учетная запись root тесно связана с задачами автоматизированного обслуживания системы.
  • Оставшиеся вопросы будут связаны с удалением анонимного пользователя базы данных для ограничения возможности входа в учетную запись root дистанционно на localhost, удалением тестовой базы данных и перезагрузкой таблиц привилегий. На эти вопросы можно спокойно ответить .

После завершения выполнения скрипта MariaDB начнет запуск с использованием настройки по умолчанию. Для стандартной установки ERPNext используется пользователь root для всех операций базы данных. Хотя этот подход может быть удобен для настроек одного сервера, он не является оптимальным с точки зрения безопасности. Поэтому в следующем разделе вы узнаете, как избежать этой проблемы путем создания нового пользователя со специальными привилегиями.

Создание пользователя-суперадминистратора MariaDB

ERPNext будет использовать пользователя root MariaDB для управления подключениями базы данных, но это не всегда идеальное решение. Чтобы преодолеть это ограничение и разрешить пользователю без привилегий root управлять MariaDB, вы вручную создадите базу данных с именем вашего пользователя. Затем вы сможете присвоить специальные привилегии новому пользователю для управления операциями базы данных ERPNext.

Откройте командную строку MariaDB:

Теперь создайте новую базу данных с именем пользователя, которое вы хотите назначить для подключений MariaDB. В этом обучающем руководстве будет использоваться , но вы можете выбрать другое имя:

Убедитесь, что база данных была создана с помощью этого оператора SQL:

Вы увидите примерно следующий вывод:

Теперь создайте пользователя MariaDB с привилегиями, аналогичными root, а затем задайте пользователю надежный пароль на свой выбор. Сохраните пароль в надежном месте, он понадобится вам позже:

Теперь подтвердите создание пользователя и новые привилегии пользователя:

Результат должен будет выглядеть следующим образом:

Теперь очистите привилегии, чтобы вступили в силу все изменения:

После этого закройте сеанс:

Теперь, после создания пользователя базы данных, необходимо только сделать отладку MariaDB для обеспечения надлежащей работы ERPNext 12. К счастью, команда ERPNext предоставляет превосходный шаблон настроек, который вы будете использовать в качестве отправной точки для внедрения. В следующем разделе вы узнаете, как правильно настроить базу данных MariaDB.

Совместимость версий

Важно: Использование несовместимых версий пакетов для компиляции цепочек инструментов приводит к неизбежным сбоям. По умолчанию считают все версии несовместимыми.. Следующая стратегия позволяют выбирать совместимые версии gcc, binutils, ядра и библиотеки C:

Следующая стратегия позволяют выбирать совместимые версии gcc, binutils, ядра и библиотеки C:

  • Основные правила:
    • существует корреляция между выпусками gcc и binutils, используйте одновременно выпущенные версии;
    • лучше использовать последние заголовки ядра для компиляции libc, но использовать переключатель (специфично для glibc, другие библиотеки C могут использовать другие соглашения) для обеспечения работы на старых ядрах;
  • Официальные репозитории: вам, возможно, придется использовать дополнительные исправления и хаки, для версий используемых в Arch Linux (или специфичные ответвления для архитектуры), скорее всего, созданные для совместной работы;
  • Документация по программному обеспечению: все программное обеспечение GNU и файлы, документирующие такие вещи, как минимально необходимые зависимости;
  • Другие дистрибутивы: они тоже делают кросс-компиляцию

Поиск проблемы

Что делать, если компиляция не удалась без четкого сообщения?

Если ошибка возникла во время выполнения , прочитайте . Для ошибки, произошедшей во время компиляции, прокрутите консоль, войдите в систему или найдите слово «error».

Что означает эта ошибка ?

Скорее всего, вы допустили некоторые неочевидные ошибки:

  • Слишком много или слишком мало флагов конфигурации. Попробуйте использовать уже проверенный набор флагов.
  • Зависимости повреждены. Например, неуместные или отсутствующие файлы binutils могут привести к загадочной ошибке во время настройки gcc.
  • Для некоторых комбинаций / может потребоваться, чтобы каталоги были доступны для записи (что не очевидно из руководства clfs).
  • В sysroot нет ни заголовков ядра или libc.
  • Если google не помогает, отмените текущую конфигурацию и попробуйте более стабильную/проверенную.

Почему файлы устанавливаются в неправильных местах?

Различные методы запуска приводят к разным результатам. Например, некоторые цели make могут не обеспечивать поддержку , а вместо этого требуют использования . То же самое для , и других подобных аргументов. Иногда предоставление параметров в качестве аргументов вместо переменных среды, например

./configure CC=arm-elf-gcc

вместо

CC=arm-elf-gcc ./configure

и наоборот, может привести к различным результатам (часто вызванным рекурсивным самовывозом configure/make).

После установки

Итак, Вы установили MinGW написали простейшую программу 3.cpp, компилируете с помощью gcc

gcc 3.cpp

А в ответ

c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\Andrei\AppData\Local\Temp\ccuoNssB.o:3.cpp:(.text+0x28): undefined reference to `std::ios_base::Init::~Init()’
c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\Andrei\AppData\Local\Temp\ccuoNssB.o:3.cpp:(.text+0x58): undefined reference to `std::ios_base::Init::Init()’
collect2.exe: error: ld returned 1 exit status

Мой совет — попробуйте g&plus;&plus;

g&plus;&plus; 3.cpp

Если Вы планируете писать софт, который должен будет работать под
UNIX-подобными ОС, например

Linux

или

OpenBSD

то устанавливать MinGW не стоит.

Попробуйте добавить в Ваш Windows подсистему для Linux и установить gcc там.

Разработка

Текущая стабильная версия GCC — 10.2, выпущенный 23 июля 2020 года.

Начиная с версии 4.8, GCC реализован на C ++.

GCC 4.6 поддерживает много новых Objective-C функции, такие как объявленные и синтезированные свойства, точечный синтаксис, быстрое перечисление, дополнительные методы протокола, атрибуты метода / протокола / класса, расширения классов и новый API времени выполнения GNU Objective-C. Он также поддерживает язык программирования Go и включает библиотеку , которая предоставляет математические функции четверной точности для целей, поддерживающих тип данных .. Библиотека используется для предоставления типа в GNU Fortran для таких целей.

GCC использует в своей сборке множество стандартных инструментов, включая Perl, Flex, Bison и другие распространенные инструменты. Кроме того, в настоящее время для сборки требуется наличие трех дополнительных библиотек: GMP и MPFR.

Основная часть разработки концентрирует основную часть усилий по разработке, где внедряются новые функции и проверено.

Clang как кросс-компилятор

Эти досадные ограничения побудили меня обратить внимание на LLVM (и Clang), который изначально создан как полноценный тулчейн для кросс-компиляции, и при этом практически полностью совместим с GNU. Один единственный инстанс LLVM способен собирать и компилировать код для каждой поддерживаемой платформы; помимо него для сборки нужен лишь sysroot

Несмотря на то, что он ещё не может сравниться по удобству с тулчейнами современных языков (такими, как gc и / в Go), это всё же настоящий глоток свежего воздуха по сравнению со сложностями настроек тулчейнов GNU. Вы можете просто установить его из пакетов для вашего дистрибутива (если только он не сильно старый), и сразу избежать всех сложностей с множественными установками GCC.

Ещё несколько лет назад весь процесс не был настолько хорошо настроен. Поскольку LLVM ещё не включал в себя весь тулчейн, вам нужно было по-прежнему откуда-то брать , специфичный для вашей целевой платформы. И даже хотя решить эту проблему было гораздо проще, чем собрать весь компилятор целиком ( собирается значительно быстрее), этот факт всё же добавлял хлопот. Однако к настоящему моменту (интегрированный ассемблер LLVM) и (универсальный линкер) уже стабильны и настолько же гибки, как весь остальной LLVM.

Когда весь тулчейн доступен, для компиляции и сборки вашего проекта необходим ещё sysroot, содержащий все необходимые библиотеки и заголовочные файлы.

Особенности компиляции программ под X-Window

Imakefile и программа xmkmf

К моменту появления системы X-Window проблема различий при компиляции под
разные клоны Unix стала уже широко известна, и был разработан способ,
позволяющий унифицированно компилировать ПО для X под разными системами.

Идея заключалась в том, чтобы перед компиляцией Makefile автоматически
генерировался специальной утилитой xmkmf, «знающей» про специфику
конкретной системы, из другого файла, под названием Imakefile. В Imakefile же на
некоем специальном языке записывается примерно та же информация, что в Makefile.

Хотя замысел был очень хороший, реализация оставляет желать лучшего.
Во-первых, язык Imakefile’ов — не менее «птичий», чем у Makefile, так что
людей, умеющих их создавать, еще меньше. Во-вторых, xmkmf берет
описание системы из нескольких файлов конфигурации (в глубине директории
/usr/X11R6/), а они зачастую оказываются несовместимы с конкретным
Imakefile, и xmkmf просто завершается с каким-нибудь маловразумительным
сообщением об ошибке.

Тем не менее, большинство программ под X-Window поставляются именно с
Imakefile.

Пример сборки и установки программы под X-Window

В качестве примера рассмотрим сборку и установку программы XRoach (той самой,
что пускает бегать по экрану тараканов). Воспользуемся локальной
копией дистрибутива.

Сначала развернем дистрибутив:

bobby:~/soft% tar xfz ~/xroach.tar.gz
bobby:~/soft% cd xroach/
viper:~/soft/xroach% ls
Imakefile     roach060.xbm  roach165.xbm  roach270.xbm  squish.xbm
README.linux  roach075.xbm  roach180.xbm  roach285.xbm  xroach.a
patchlevel.h  roach090.xbm  roach195.xbm  roach300.xbm  xroach.c
roach000.xbm  roach105.xbm  roach210.xbm  roach315.xbm  xroach.man
roach015.xbm  roach120.xbm  roach225.xbm  roach330.xbm
roach030.xbm  roach135.xbm  roach240.xbm  roach345.xbm
roach045.xbm  roach150.xbm  roach255.xbm  roachmap.h
bobby:~/soft/xroach% _

Прочтя файл README.linux, мы узнаем лишь, что при компиляции должно
быть предупреждение (warning) в строке 373.

Запускаем xmkmf и затем make:

bobby:~/soft/xroach% xmkmf
imake -DUseInstalled -I/usr/X11R6/lib/X11/config
bobby:~/soft/xroach% make
gcc -O2 -fno-strength-reduce     -I/usr/X11R6/include   -Dlinux -D__i3
86__ -D_POSIX_C_SOURCE=199309L -D_POSIX_SOURCE -D_XOPEN_SOURCE=500L -D
_BSD_SOURCE -D_SVID_SOURCE   -DFUNCPROTO=15 -DNARROWPROTO     -c xroac
h.c -o xroach.o
xroach.c: In function `FindRootWindow':
xroach.c:373: warning: passing arg 9 of `XGetWindowProperty' from inco
mpatible pointer type
xroach.c:373: warning: passing arg 12 of `XGetWindowProperty' from in
compatible pointer type
rm -f xroach
gcc -o xroach -O2 -fno-strength-reduce      -L/usr/X11R6/lib xroach.o
 -lXext -lX11   -lm
bobby:~/soft/xroach% _

Теперь, аналогично обычным программам, делаем «make install«:

bobby:~/soft/xroach% su
Password:
bobby:~/soft/xroach# make install
install -c -s  xroach /usr/X11R6/bin/xroach
install in . done
bobby:~/soft/xroach# _

Единственно что, автор поленился сделать автоматическую установку
man-страницы, хотя она и есть. Что ж, не беда — скопируем ее в нужное место
«руками»:

bobby:~/soft/xroach# cp xroach.man /usr/X11R6/man/man1/
bobby:~/soft/xroach# _

Установка GCC на Debian

Репозитории Debian по умолчанию содержат метапакет с именем , содержащий компилятор GCC и другие библиотеки и утилиты, необходимые для компиляции программного обеспечения.

Для установки Debian 10 GCC Compiler выполните следующие действия:

  1. Сначала обновите список пакетов:

    Установите пакет , выполнив:

    Вы также можете установить страницы справочника, которые включают документацию по использованию GNU / Linux для разработки:

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

    На момент написания этой статьи версия GCC по умолчанию, доступная в репозиториях Debian 10, была :

Вот и все. Вы успешно установили GCC на свой компьютер Debian.

Заключение

Кросс-компиляция кода на C и C++ является, и скорее всего навсегда останется непростой задачей, однако она стала значительно проще, покуда LLVM достиг стабильности и стал широко распространён. Параметр в Clang избавил меня от траты бесчисленного множества человеко-часов на бесконечную сборку и пересборку GCC и Binutils.

К сожалению, не всё то золото, что блестит, и так бывает довольно часто. До сих пор встречаются костыли, которые собираются только с помощью GCC из-за грязных GNUизмов (да-да, Glibc, это про тебя). Кросс-компиляция под Windows/MSVC также невозможна ввиду сильной запутанности всего тулчейна Visual Studio.

Кроме того, хотя сборка под целевую платформу путём указания в Clang верного триплета стала гораздо проще, чем когда-то была, она всё равно нервно курит, поглядывая на то, насколько тривиальна кросс-компиляция в случае с Rust или Go.

Из новых языков отдельного упоминания заслуживает Zig, поскольку его целью является также облегчение сборки кода на C и C++ под другие платформы.

Команды и потенциально могут стать удивительным швейцарским ножом для кросс-компиляции, благодаря тому, что Zig содержит в себе и множество частей из разных проектов, такие как Glibc, Musl, libc++ и MinGW. Благодаря этому любая нужная библиотека собирается, если надо, прямо на лету:

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

Заключение

Не всегда установка из бинарного дистрибутива проходит так гладко и просто —
мы выбрали самые несложные примеры, чтобы проиллюстрировать процесс установки.

Многие программы кроме собственно исполняемого файла (а чаще файлов) содержат
еще некоторое количество файлов конфигурации и библиотек, которые следует
поместить в строго определенные места (обычно внутри директории lib/) и
man-страниц.

Кроме того, часто после установки требуется выполнить «руками» некоторые
дополнительные действия — например, добавить в стартовые файлы shell установку
некоторых переменных окружения, модифицировать конфигурацию window manager’а
(добавить программу в меню или настроить ее автоматический запуск).

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Работатека
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: