Софт-Портал

Gcc Linux

Рейтинг: 4.4/5.0 (400 проголосовавших)

Категория: Linux

Описание

Настройка Linux для программирования МК AVR

Настройка рабочего окружения в Linux для программирования микроконтроллеров AVR

В этой статье мы рассмотрим шаги, которые нужно предпринять, чтобы получить рабочую среду для программирования микроконтроллеров архитектуры Atmel AVR на языке Си в Linux. Мы адресуем эту статью в большей степени новичкам в Linux, поэтому обратим внимание на некоторые моменты, которые продвинутым пользователям могут показаться элементарными.

Дистрибутивов Linux существует огромное количество, мы будем исходить из того, что вы используете Debian или один из дистрибутивов, основанных на Debian, например популярный дистрибутив Ubuntu. В дистрибутивах, основанных не на Debian, изменится только процедура установки программных пакетов. Мы будем использовать только свободное программное обеспечение, с открытым исходным кодом и, разумеется, полностью бесплатное.

Без чего не обойтись

Необходимый минимум программного обеспечения, которое нам понадобится:

gcc-avr - это та часть мощной GNU Complier Collection (GCC), которая будет осуществлять кросс-компиляцию для целевой архитектуры микроконтроллеров AVR. GCC используется для сборки самого Linux, он поддерживает стандарты языка Си ISO C90 (ANSI-C), ISO C99, а также собственные расширения языка Си. GCC поддерживает огромное количество архитектур процессоров. Код, скомпилированный с помощью GCC для одной из платформ, потребует минимальных правок (или не потребует правок вообще) при компиляции для другой целевой платформы.

binutils-avr - ассемблер, компоновщик и некоторые полезные утилиты.

avr-libc - стандартная библиотека Си для Atmel AVR.

avrdude - утилита для работы с программаторами.

Это необходимый минимум для создания приложений для AVR и прошивки микроконтроллеров. Для отладки пригодятся следующие пакеты:

gdb-avr - отладчик для AVR.

avarice - интерфейс между avr-gdb и AVR JTAG ICE.

simulavr - симулятор Atmel AVR.

Чтобы установить нужные программные пакеты, откроем терминал и выполним следующую команду:

sudo apt-get install gcc-avr binutils-avr avr-libc avrdude gdb-avr avarice simulavr

Подождем некоторое время, пока пакеты будут загружены из репозитория и установлены и посмотрим, что теперь есть хорошего в нашей системе:

Это список программ, которые мы получили. Удобство использования Linux заключается не только в том, что все необходимое мы загрузили и установили одной командой, но и в том, что у нас теперь есть исчерпывающа справка по использованию этих инструментов. Чтобы воспользоваться этой справкой, достаточно набрать в терминале

Пробегите глазами, например, man avr-gcc, man avr-objdump, man avrdude. Нажмите клавишу 'h', когда находитесь внутри команды man, чтобы получить список клавиш для перемещения по странице справки.

В принципе, того, что у нас есть сейчас, достаточно для того, чтобы заниматься разработкой для AVR, используя любой текстовый редактор. Тем, кто хорошо знает Linux и способен написать удобные псевдонимы команд или скрипты, чтобы не писать каждый раз изрядное количество опций к командам, возможно, больше ничего и не понадобится. Но большинству пользователей, думаю, хотелось бы использовать удобную графическую среду разработки, позволяющую писать код, компилировать, отлаживать и загружать его в микроконтроллер.

Интегрированная среда разработки

Мы установим мощную IDE Eclipse, которую сможем использовать не только для программирования микроконтроллеров, но и при желании, для написания программ практически на любом языке для host-платформы. Eclipse - это кросс-платформенный инструмент для построения интегрированных сред разработки, реализуемых в виде плагинов, написанный на Java. Вы можете использовать Eclipse не только на Linux, но и в других операционных системах. Единственный минус этого решения - требовательность к объему оперативной памяти в некоторых случаях. Если на вашей машине меньше 2 Gb оперативной памяти, то мы рекомендовали бы добавить планочку, на всякий случай.

Не будем бегать по сети в поисках Eclipse, посмотрим, что доступно в репозитории:

apt-cache search eclipse

Нам понадобится базовый пакет eclipse и инструменты разработчика на C/C++ eclipse-cdt. Устанавливаем, особо не рефлексируя:

sudo apt-get install eclipse eclipse-cdt

Запустим Eclipse и добавим плагин для удобной работы с AVR, который, помимо всего прочего, обеспечит нам возможность работать с различными моделями программаторов. При запуске Eclipse попросит указать директорию, где будут храниться исходники проектов, выбирайте любое имя на свое усмотрение (директория не должна существовать, Eclipse создаст ее самостоятельно). После того, как Eclipse запустился, пройдем по меню

Help -> Install new software. -> Add.

Нам предлагают ввести URL репозиторя, содержащего нужный нам плагин. Узнать URL можно, посетив сайт marketplace.eclipse.org. Забьем в строку поиска "AVR" и найдем AVR Eclipse Plugin, распространяемый под свободной лицензией. На странице плагина нужно догадаться кликнуть по зеленой стрелочке, чтобы получить URL репозитория: http://avr-eclipse.sourceforge.net/updatesite/ .

Копируем этот URL в поле "Location" в оконе "Add repository" Eclipse, жмем "Ok". Eclipse подгрузит список доступного ПО из репозитория, отмечаем чекбокс напротив AVR Eclipse Plugin и жмем "Next". Последующие шаги мастера установки проходим, ни от чего не отказываясь. После установки плагина Eclipse захочет перезапуститься, в наших интересах ему это позволить. IDE готова к работе. Теперь разберемся с программатором.

Подключаем программатор


Для начала воткнем в машину тот программатор, который есть под рукой. Допустим, у нас оказался AVR-910. Для этого программатора понадобится драйвер Prolific, этот драйвер уже присутствует в стандартном ядре Linux и дополнительных телодвижений не потребуется. Если же под рукой оказался популярный программатор AVR910 by PROTTOSS, то возможно, придется его немного допилить .

После втыкания программатора в разъем USB, у нас появится новое устройство. В Linux устройства отображаются в файловую систему и мы можем читать, писать в них и изменять права доступа так же, как мы делаем это с обычными файлами. Устройств в каталоге /dev довольно много, поэтому, чтобы быстро обнаружить новое, воспользуемся стандартными консольными утилитами в терминале:

ls /dev > /tmp/dev1 # сохраним список устройств в /dev во временный файл /tmp/dev1
# присоединим программатор
ls /dev > /tmp/dev2 # сохраним список устройств в /dev во временный файл /tmp/dev2
comm -3 /tmp/dev1 /tmp/dev2 # найдем различия в списках устройств

Мы обнаружили, что в каталоге /dev появилось устройство ttyUSB0. Посмотрим, сможем ли мы с ним работать, хватит ли у нас прав:

crw-rw---- 1 root dialout 188, 0 окт. 22 14:49 /dev/ttyUSB0

Мы видим, что для устройства заданы разрешения на чтение и запись для пользователя root и группы dialout. Пользователи, не входящие в эту группу, работать с устройством не смогут. Проверим список групп, в которые мы входим:

owlet adm cdrom sudo dip plugdev lpadmin sambashare vboxusers

Так как группы dialout мы не видим, то придется добавить себя в эту группу:

sudo usermod -a -G dialout `whoami` # команда whoami - в обратных кавычках

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

owlet adm dialout cdrom sudo dip plugdev lpadmin sambashare vboxusers

Все в порядке, запускаем Eclipse и.

Настройка Eclipse и первый проект

попробуем создать проект:

File -> New -> C Project

Придумаем имя проекта и выберим тип - AVR Cross Target Application -> Empty Project. Жмем "Finish", и переходим к настройкам проекта - в панели Project Explorer жмем правой кнопкой мыши на нашем проекте и выбираем "Properties" в выпавшем меню. Чего тут только нет. Нас интересуют вкладки "AVR" и "C/C++ Build".

Сначала идем в AVR -> AVRDude -> Programmer -> Programmer Configuration -> New. Придумываем имя нашему программатору (например, AVR-910). Теперь нужно выбрать тип программатора. В списке доступных типов мы не находим ничего, похожего на 910. Поэтому кликаем все подряд. Когда доберемся до "Atmel Low Cost Serial Programmer", то увидим в окошке справа:

id = "avr910";
desc = "Atmel Low Cost Serial Programmer";
type = avr910;

Это то, что нужно, оставляем этот выбор. Теперь выберем устройство, как мы помним, у нас это /dev/ttyUSB0. Записываем это в поле "Override default port". Это все, жмем "Ok". И устанавливаем только что созданный профиль в качестве значения в поле "Programmer configuration". Идем дальше.

AVR -> Target Hardware -> MCU Type. Если программатор подключен к макетной плате с микроконтроллером (или микроконтроллер воткнут в программатор), то пробуем нажать "Load from MCU". Если MCU Type прочитался и установился корректно, то скорее всего, тип программатьора на предыдущем шаге мы выбрали верно. Если это не так, то нужно еще раз проверить тип программатора, его работоспособность, наличие контакта на макетке. Устанавливаем MCU Clock Frequency в то значение, которое у нас имеется.

Можно еще походить по вкладкам AVR -> AVRDude ->. и обнаружить настройки чтения и записи Fuse и Lock-битов и некоторые другие опции, но пока нам это не нужно и мы идем дальше.

Вкладка C/C++ Build -> Settings -> AVR Compiler -> Miscellaneous -> Other flags - добавляем опцию -g для того, чтобы в ассемблерном листинге мы смогли видеть исходные строки на Си. Посмотрите другие разделы C/C++ Build -> Settings -> AVR Compiler - тут можно установить настройки оптимизации компилятора и другие полезные параметры.

Сохраняем изменения в параметрах проекта и добавим одно полезное сочетание клавиш в нашу IDE: Window -> Preferences -> General -> Keys ищем команду Upload Progect и назначаем сочетание клавиш (например, Ctrl+Alt+U). И там же мы видим, что на комаду Build All уже назначено сочетание Shift+Ctrl+B. Эти две комбинации мы будем вызывать для перекомпиляции исходников и прошивки микроконтроллера.

Теперь нам осталось создать файл main.c (жмем правой лапкой мышки на проекте, New -> File), написать тестовую программу скомпилировать ее и прошить железку. Можно посмотреть ассемблерный листинг получившегося кода, открыв файл <имя проекта>.lss, который появится в директории "Debug" или "Release" в проекте (в зависимости от текущего профиля) после компиляции.

Если все прошло удачно, скорее сносите проприетарные операционные системы со своей машины и будьте свободны. О средствах отладки для AVR под Linux мы напишем в следующей статье.

Gcc linux:

  • скачать
  • скачать
  • Другие статьи, обзоры программ, новости

    Gcc (Новости)

    Состоялся релиз GCC 6.1 — набора свободных компиляторов с открытым исходным кодом. Основным новшеством стало применением в компиляторе C++ по умолчанию стандарта C++14 и улучшение экспериментальной поддержки C++17. Кроме того расширены средства диагностики, заявлена полная совместимость с OpenMP 4.5 и поддержка системной библиотеки musl. Также заявлено об улучшении поддержки платформ ARM и поддержке процессоров AMD Zen, Intel Skylake, IBM z13 и IBM POWER 9.

    • Активировано по умолчанию для языка C++ использование стандарта C++14 (применяется режим -std=gnu++14 вместо -std=gnu++98 ). Кроме того добавлена поддержка расширения системы шаблонов C++ Concepts, активируемая опцией -fconcepts. Реализованы некоторые новые элементы будущего стандарта C++17, такие как выражения fold, символьные литералы u8, расширенный static_assert и вложенное определение пространств имён. Реализована возможность вычисления констант для всех бестиповых аргументов шаблонов. Добавлена поддержка транзакционной памяти (C++ Transactional Memory) при сборке с опцией -fgnu-tm ;
    • Для runtime-библиотеки libstdc++ расширен набор специальных математических функций (ISO/IEC 29124:2010), добавлена экспериментальная поддержка стандарта C++17 (в том числе новые функции std::size. std::empty. std::data для контейнеров и массивов, std::uncaught_exceptions. std::invoke. std::shared_mutex. std::void_t и std::bool_constant ), экспериментальная поддержка File System TS, экспериментальная поддержка второй версии Library Fundamentals TS, поддержка std::locale для DragonFly и FreeBSD;
    • Появилась поддержка Си-библиотеки musl, которую можно использовать на Linux-системах с архитектурой AArch64, ARM, MicroBlaze, MIPS, MIPS64, PowerPC, PowerPC64, SH, i386, x32 и x86_64. Поддержка включается опцией -mmusl или при выборе архитектуры по маске *-linux-musl* .

    Разработчики официального компилятора языка программирования Go объявили об окончательном отказе от использования дополнительного компилятора языка Си при сборке и компиляции проекта. Теперь проект полностью переписан на Go с использованием небольшого количества ассемблера.

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

    Также объявлено, что следующий релиз языка с версией 1.5 произойдет в августе 2015 года, сейчас проект заморожен для внесения новых улучшений, а разработчики заняты устранением существующих ошибок.

    В GCC версии 5 будет доступна возможность jit-компиляции исходного кода и встраивание GCC в виде разделяемой библиотеки libgccjit в другие программы. Новые возможности были продемонстрированы на примере небольшого интерпертатора brainfuck.

    OpenMandriva Lx 2015 станет первым дистрибутивом Linux, перешедшим на LLVM/Clang в качестве базового компилятора. В качестве его преимуществ перед GCC были названы более быстрое развитие, более широкие возможности проверки кода и меньшие временные затраты на сборку пакетов. GCC будет оставлен дополнительным компилятором.

    Состоялся очередной выпуск GCC 4.7.4.

    GNU Compiler Collection (GCC) — набор компиляторов для различных языков программирования, разработанный в рамках проекта GNU. GCC является свободным программным обеспечением, распространяется фондом свободного программного обеспечения на условиях GNU GPL и GNU LGPL и является ключевым компонентом GNU toolchain .

    GCC 4.7.4 является последним релизом с баг-фиксами для версии GCC 4.7. Новая версия содержит ряд важных исправлений регрессий и серьезных ошибок. GCC 4.7.3 содержит более 134 исправлений ошибок, исправленных после предыдущего релиза. Этот релиз доступен на FTP-серверах, доступных на GNU Mirror List .

    Спустя один год и один месяц с предыдущего значительного релиза объявлен выпуск новой версии набора компиляторов GNU Compiler Collection 4.9.0.

    • Local Register Allocator, представленный в версии 4.8.0 для архитектур ia32 и x86-64, теперь используется также для Aarch64, ARM, S/390 и ARC по умолчанию, а для PowerPC и RX опционально.
    • Существенные улучшения девиртуализации C++, исправлены различные ограничения масштабируемости межпроцедурных оптимизаций и LTO.
    • Во фронтенд C++ была добавлена поддержка различных возможностей будущего стандарта C++14. Наиболее значительное изменение в стандартной библиотеке C++ — поддержка регулярных выражений C++11.
    • GCC 4.9.0 поддерживает стандарт OpenMP 4.0 для C и C++, а также частично реализовано расширение Cilk Plus для параллелизма данных и задач.
    • Различные виды неопределенного поведения (undefined behavior) теперь могут быть диагностированы во время выполнения с помощью Undefined Behavior Sanitizer.
    • Добавлена поддержка новой аппаратной платформы little-endian powerpc64le-linux, по умолчанию для нее используется новый ABI PowerPC ELFV2.
    • Добавлена поддержка набора инструкций AVX-512 на x86-64 и ia32.

    GNU toolchain — это набор созданных в рамках проекта GNU программ, необходимых для компиляции и генерации исполняемого кода из исходных текстов. В него входят GCC, libc, binutils, GNU make и многое другое.

    В этом месяце разработка не отличалась особой активностью. Основная ветка GCC вплотную подобралась к релизу 4.9, а работа над проектами GDB и BINUTILS заключалась в основном в исправлении ошибок. Однако есть и несколько достойных внимания вещей:

    • В эмулятор ARM добавлены некоторые возможности трассировки, таким образом, теперь можно отслеживать инструкции по ходу их эмуляции.
    • Линковщик теперь автоматически добавляет стандартный манифест ко всем полностью слинкованным исполняемым файлам cygwin или MinGW. Это необходимо для выполнения файла под Windows версии 8 и позднее. Если приложение снабжено собственным манифестом, стандартный включаться не будет.
    • В ARM-версию линковщика добавлен новый ключ командной строки — --long-plt. включающий генерацию больших PLT-записей, которые могут поддерживать вплоть до 4GB кода. По умолчанию используются PLT-записи меньшего размера, которые поддерживают лишь до 512 MB кода. Помимо этого, ARM-линковщик теперь поддерживает генерацию PLT-записей, использующих лишь Thumb2-инструкции, для ядер, не поддерживающих набор инструкций ARM.
    • Одним из ограничений формата PE, используемого преимущественно в исполняемых файлах Windows, является поддержка максимум 2?? секций. Это может быть проблемой для больших проектов, особенно если используются ключи командной строки типа -ffunction-sections и -fdata-sections. Microsoft недавно выпустила небольшую модификацию формата PE, расширяющую некоторые поля для подержки до 2?? секций, и теперь линковщик GNU поддерживает это расширение.
    • MIPS-версия gcc теперь поддерживает ключ командной строки -mvirt. позволяющий использовать MIPS Virtualization Application Specific инструкции.
    • TileGX-версия gcc теперь поддерживает прямой и обратный порядок байтов.

    Начиная с прошлой недели GNU Compiler Collection (GCC) больше не собирается по умолчанию как часть базовой системы FreeBSD 10. Известно, что на протяжении нескольких месяцев разработчики FreeBSD, а также пользователи BSD-семейства, добивались перехода на LLVM/Clang и ограничения роли GCC.

    Функциональные возможности Clang в качестве компилятора C/C++ достигли уровня GCC, а распространение под лицензией BSD делает его более привлекательным для разработчиков системы. Кроме того, показатели эффективности LLVM продолжают расти: это и более быстрая компиляция, и меньший расход памяти.

    GCC останется лишь на тех архитектурах, где неприменим Clang. Желающим продолжить использование GNU Compiler Collection на своей системе необходимо будет указать опции WITH_GCC и WITH_GNUCXX в файле src.conf

    Вышла новая версия набора компиляторов GNU — 4.8.0. Среди нововведений:

    • Теперь для сборки GCC требуется компилятор С++.
    • Формат отладочной информации по умолчанию изменён на DWARF4, который поддерживается в GDB 7.5, Valgrind 3.8.0 и elfutils 0.154.
    • Добавлен новый уровень оптимизации -Og, предназначенный для быстрой компиляции и отладки, обеспечивая при этом приемлемую производительность.
    • Убран ряд узких мест в оптимизаторе, что существенно ускорило компиляцию чрезвычайно больших функций.
    • Добавлены AddressSanitizer (быстрый детектор ошибок работы с памятью) и ThreadSanitizer (детектор гонок данных).
    • Улучшены сообщения об ошибках, исходная строка выводится полностью, а колонка с ошибкой отмечается знаком ^. Опция ftrack-macro-expansion=2 теперь включена по умолчанию, что показывает стек раскрытия макросов:
  • Улучшена поддержка стандарта C++11: поддерживается ключевое слово thread_local, синтаксис атрибутов, спецификаторов выравнивания и наследование конструкторов. Также добавлена опция -std=C++1y для поддержки будущего стандарта, пока она добавляет только возможность автоматического определения типа результата в определении функций.
  • Реализована предварительная версия языка Go 1.1.
  • Добавлена поддержка архитектуры AArch64.
  • В прошедший вторник в список рассылки GCC попало одно письмо, вызвавшее множество ответов и даже интересное обсуждение о будущем GNU Compiler Collection, о его конечных целях и об их достижимости. В первом письме просто был задан вопрос о примерных сроках полной реализации стандарта ISO C++11. Но по мере разрастания нити Diego Novillo из Google, хорошо зарекомендовавший себя в роли разработчика GCC, даже высказал опасения, что GCC уже прошёл точку невозврата и ему грозит естественная смерть.

    Высокая скорость работы очень важна для мультимедийных и графических приложений, а также приложений, осуществляющих обработку сигналов. Компилятор GCC позволяет использовать промежуточный вариант между ассемблером и стандартным языком C, который позволяет повысить скорость работы приложения и использовать специфические возможности центрального процессора, не используя ассемблер: внутренние функции (compiler intrinsics). Эта статья описывает внутренние функции компилятора GCC, при этом выделяются принципы использования этих функций на примере трех платформ: X86 (используются технологии MMX, SSE и SSE2); Motorоla, а сейчас Freescale (используется технология Altivec); и ARM Cortex-A (используется технология Neon).

    Для начала изменен только bootstrap код. Цель — улучшение качества кода (поскольку С++ жестче работает с типами). Когда там появятся классы и темплейты. Официально заявленные причины использовать С++:

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

    Как можно заключить из сообщений в рассылке разработчиков gcc, к версии gcc 4.8 будет предпринята попытка официально ввести в состав gcc gdc — свободную реализацию компилятора языка D (digitalmars D).

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

    Так, средства метапрограммирования имеют ясный синтаксис и не порождают нечитаемых сообщений об ошибках. Язык поддерживает концепцию модулей. Скорость компиляции и сборки кода настолько высока, что D можно использовать вместо интерпретируемых языков (скрипты).

    D не накладывает жёстких парадигменных ограничений и позволяет записывать код в обобщённом, объектно-ориентированном, функциональном и процедурном стилях, а так же их комбинации. Штатно предоставляются полные средства интроспекции. Дополнительно компилятор несёт в себе нечто вроде интерпретатора языка, позволяющего динамически добавлять/изменять методы во время исполнения.

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

    В целом, D представляется интересным дляпрограммирующих пользователей . нуждающихся в современных выразительных средствах, но не имеющих возможности изучать все особые случаи C++.

    Свободно доступен референсный компилятор dmd, однако он предназначен, скорее, для исследовательских целей. Появление штатного фронтенда D в наборе gcc позволяет надеяться на переход от чисто экспериментального применения этого интересного и мощного языка к широкому внедрению.

    Данная версия является первым корректирующим релизом ветки 4.7. Она содержит важные исправления регрессий и серьезных ошибок. Всего исправлено 117 ошибок по сравнению с 4.7.0.

    Среди изменений отметим:

    • полноценную поддержка языка Go;
    • исправление ошибки 53599. приводящей к невозможности сборки boost.karma;
    • исправление ошибки 53046. приводящей к невозможности корректного прохождения тестов новых версий libstdc++;
    • исправление ошибки 52465 (невозможность использования директивы using в объявлении класса), приводящей к невозможности сборки Webkit;
    • исправление ошибки 52473 (невозможность использования перегружаемых функций).

    GCC Explorer — это новый интерактивный компилятор, созданный на базе GCC Мэттом Годбольтом (Matt Godbolt). Он довольно прост в использовании и поддерживает популярные языки программирования C и C++. GCC Explorer основан на технологиях AJAX, следовательно любое изменение исходного кода и/или флагов сразу же запустит обновление окна с результатами компиляции.

    Этот компилятор существует в виде web-приложения реального времени, в котором можно написать/выполнить любой фрагмент кода. Используя GCC Explorer можно практически мгновенно оценить результаты своей работы, а также окинуть взглядом присутствующие ошибки и недочеты в коде, и затем — быстро исправить их, смеясь в лицо «задумчивости» обычных компиляторов.

    >>> Исходники на GitHub

    Как отмечено в Q1-2012 FreeBSD Status Report, LLVM компилятор Clang стремительно замещает GCC для этой популярной BSD ОС. Разработчики заметно продвинулись в построении C++11-стека, свободного от GNU. К релизу FreeBSD 10 они планируют сделать Clang С/С++ компилятором по умолчанию, отказавшись от GCC, и получить стек разработки на C++ под лицензией BSD.

    Спустя 15 месяцев после выхода предыдущей версии, 8 мая 2011 года была опубликована версия 5.0.2 свободной открытой библиотеки для расчётов с произвольной точностью над целыми числами, рациональными дробями и числами с плавающей запятой GMP - The GNU Multiple Precision Arithmetic Library .

    GMP является частью проекта GNU и распространяется на условиях GNU LGPL .

    GMP находит применение в криптографических приложениях, научных исследованиях, алгебраических системах итп.

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

    Функции в GMP поделены на категории для удобства использования:

    • mpz - высокоуровневые арифметические и логические функции для операций над знаковыми целыми числами (около 140).
    • mpq - высокоуровневые арифметические функции для операций над рациональными дробями (около 35).
    • mpf - высокоуровневые арифметические функции для операций над числами с плавающей точкой (около 65) для вычислений с точностью не ниже двойной.
    • C++ классы для интерфейса к функциям категорий mpz. mpq. mpf .
    • mpn - низкоуровневые функции для операции с беззнаковыми целыми числами с менее удобным вызовом, но низкими накладными расходами. Используются функциями вышеперечисленных категорий.
    • mpfr - отдельно поддерживаемые и разрабатываемые высокоуровневые арифметические функции для операций над числами с плавающей точкой с высокоточным округлением.

    В полном списке изменений, который можно найти в архиве с исходными кодами, всего около 30 изменений, большая часть из которых внесена автором и главным разработчиком GMP Торбйоном Гранлундом (Torbjorn Granlund). также известным соавторством во многих утилит командной строки в Linux (cp,split), авторством GNU superoptimizer'a, а также участием в разработке gcc.
    Изменения главным образом касаются исправления ошибок, включения поддержки HPPA 2.0N, ОС Darwin и новых процессоров.

    В вышедшем выпуске осталась проблема при компиляции с gcc 4.3.2 на 64-битных архитектурах. При этом проблем с компиляцией, например, с gcc 4.3.1 или gcc 4.3.3, не замечалось. Кстати тот факт, что именно gcc 4.3.2 был включен в поставку Debian Lenny, было и остаётся источником потока багрепортов в рассылку проекта.

    GMP используется в библиотеке MPFR и, соответственно, в gcc .

    Не получается установить программу в Alt linux 4

    Не получается установить программу в Alt linux 4.0 (нет gcc?) [new]

    Откуда:
    Сообщений: 476

    Поставили ALT Linux 4.0 Lite - пытаемся запустить rdestop - его там нет :( скачали rdesktop 1.6, запускаем./configure из разархивированного каталога - выдает:
    onfigure:1829: checking for gcc
    configure:1845: found /usr/bin/gcc
    configure:1856: result: gcc
    configure:2094: checking for C compiler version
    configure:2101: gcc --version >&5
    /usr/bin/i586-alt-linux-gcc: No such file or directory
    configure:2104: $? = 1
    configure:2111: gcc -v >&5
    /usr/bin/i586-alt-linux-gcc: No such file or directory
    configure:2114: $? = 1
    configure:2121: gcc -V >&5
    /usr/bin/i586-alt-linux-gcc: No such file or directory
    configure:2124: $? = 1
    configure:2147: checking for C compiler default output file name
    configure:2174: gcc conftest.c >&5
    /usr/bin/i586-alt-linux-gcc: No such file or directory

    Это значит нет gcc вообще? В закладке Developmentc/c в центре загрузки стоят все галочки. (типа все есть :( где его взять, этот компилятор или что это?

    Re: Не получается установить программу в Alt linux 4.0 (нет gcc?) [new]

    Откуда:
    Сообщений: 135

    что выдает gcc -v и есть ли папка /usr/bin/i586-alt-linux-gcc.

    Re: Не получается установить программу в Alt linux 4.0 (нет gcc?) [new]

    Давно пользовался ALT Linux - поэтому могут быть не точности.
    В ALT Linux Lite по умолчанию gcc не ставится (а возможно - его там и нет).
    Если на диске CD пакетов для gcc нет (а в ALT Вам придется ставить несколько пакетов для сборки программ), то проще rdesktop скачать из репозитория пакетов из Интернета
    apt-get install rdesktop
    Правда для этого нужно еще настроить apt.
    Ну или скачать в ручную - ftp://ftp.altlinux.ru/pub/distributions/ALTLinux/4.0/Desktop/current/files/i586/

    Re: Не получается установить программу в Alt linux 4.0 (нет gcc?) [new]

    Откуда: moskau
    Сообщений: 5555

    Поставили ALT Linux 4.0 Lite - пытаемся запустить rdestop - его там нет :( скачали

    можно спросить нахЪ вам это убожество? Что нормальные линуксы что-ли перевелись.

    Re: Не получается установить программу в Alt linux 4.0 (нет gcc?) [new]

    Откуда:
    Сообщений: 476

    beza,
    спасибо!
    1. В Alt Linuxe 4.0 флешка определяется, а в Windows Server Terminal 2008 через rdesktop 1.5 ее нет (хотя когда клиентом работает windows, а не linux, с флешками все нормально)..
    2. А как бы сделать так, чтобы бат-файлом его запускать пользователю сразу после загрузки, а не запускать терминал и набирать rdesktop -f megaserver user password.

    Re: Не получается установить программу в Alt linux 4.0 (нет gcc?) [new]


    1. В Alt Linuxe 4.0 флешка определяется, а в Windows Server Terminal 2008 через rdesktop 1.5 ее нет (хотя когда клиентом работает windows, а не linux, с флешками все нормально)..


    Не понял - что хочется?
    Чтобы локальная флешка была видна на удаленном Windows Server Terminal 2008?
    Не пробовал - надо читать man и интернет, но возможно
    .
    -r disk:<sharename>=<path>.
    Redirects a path to the share \\tsclient\<sharename> on the server (requires Windows XP or newer). The share name is limited to 8 characters.
    .

    rdesktop -r disk:k=/mnt/flashka win_host


    2. А как бы сделать так, чтобы бат-файлом его запускать пользователю сразу после загрузки, а не запускать терминал и набирать rdesktop -f megaserver user password.


    Как запускать автоматом - не знаю.
    В принципе, можно сделать аналог ярлыка на рабочем столе -- создать Ссылка на приложение. В вкладке Приложение записать команду и ее параметры:
    rdesktop -г user -p password <other parameters> win_host

    Re: Не получается установить программу в Alt linux 4.0 (нет gcc?) [new]

    Откуда:
    Сообщений: 476

    А как делается аналог ярлыка? Когда я щелкаю правой кнопкой мыши по экрану на рабочем столе, вылазит меню Пуск, из пуска тоже не перетаскиваются приложения на рабочий стол.

    Re: Не получается установить программу в Alt linux 4.0 (нет gcc?) [new]

    Откуда:
    Сообщений: 28

    arrio,
    на рабочем столе щелкаем правой клавишей мыши. В появившемся меню выбираем Создадь.
    В появившемся подменю выбираем Ссылка на приложение

    Linux optimization - GCC

    в gentoo-linux настройки для всех собираемых программ указаны в /etc/make.conf
    он имеет примерно следующий вид:

    CFLAGS = "-O2 -march=core2 -fno-align-functions -fno-align-labels -mfpmath=sse -msse4.1 -finline-functions --param l2-cache-size=512 -fomit-frame-pointer -pipe -Wno-all"
    CXXFLAGS = " $ "
    ICCCFLAGS = "-O3 -fomit-frame-pointer -xSSE4.1 -g0 -w -gcc"
    ICCCXXFLAGS = " $ "
    CHOST = "i686-pc-linux-gnu"
    EMERGE_DEFAULT_OPTS = "-j3"
    GENTOO_MIRRORS = "http://mirror.yandex.ru/gentoo-distfiles/ ftp://ftp-stud.hs-esslingen.de/pub/Mirrors/gentoo/ ftp://sunsite.informatik.rwth-aachen.de/pub/Linux/gentoo/ http://mirror.yandex.ru/gentoo-distfiles/"
    USE = " glibc-omitfp a52 aac -wifi win32codecs vdpau accessibility acpi alsa bluetooth cdio cdr cleartype \
    consolekit ctype cue dbus disk-partition djvu \
    dvd ebook embedded emerald encode gst-ffmpeg gst-flac mp3enc gst-bad gst-ugly faac fat ffmpeg filter \
    flac flash flv fuse gif gmplayer gnutls policykit gstreamer \
    gtk gui -hal hddtemp icq secure-delete id3tag jack jabber -cups jpeg kde lame \
    lm_sensors lzma mad mmap mng mp3 mpeg chm mplayer nas musepack shine skins stream twolame udev upnp vcdinfo wma-fixed \
    mysql ntfs objc objc++ objc-gc unicode -firefox3 ogg enca wav emovix libsamplerate openal cuda profiler opengl phonon \
    plugins png qt3support qt4 quicktime smp -ipv6 -multilib -hardened rar sdl semantic-desktop \
    sql mmx sse sse2 sse3 ssse3 webkit wmf lcms pdf vcd exif -handbook -debug threads nsplugin extras sse4.1 cairo glib svg taglib theora tiff truetype unsupported vorbis \
    wavpack webkit X X509 xcomposite xinerama cdda cddax faad dirac ggi reiserfs windeco matroska -xinerama optimisememory schroedinger sdl-image cmipci usb -kdeprefix xv xvid zip -3dnow -3dnowext -mmxext x264"
    VIDEO_CARDS = "nvidia"
    LINGUAS = "ru en"
    source / usr / local / portage / layman / make.conf
    ACCEPT_KEYWORDS = "

    x86 "
    ACCEPT_LICENSE = "*"
    FEATURES = "parallel-fetch metadata-transfer candy"
    PORTAGE_NICENESS = "20"

    Для gcc версий 3.x и выше существует только 5 уровней оптимизации: -O0 (без оптимизации), -O1, -O2 и -O3 (O3 — самый высокий уровень), а так же -Os.
    Примечание: Если вы используете несколько -O опций, то только последняя объявленная будет оказывать влияние на процесс компиляции.

    -O0
    Отключает оптимизацию. Только переменные, обьявленные register, сохраняются в регистрах.

    -O(-O1)
    Включает оптимизацию. Пытается уменьшить размер кода и ускорить работу программы. Соответственно увеличивается время компиляции. При указании -O активируются следующие флаги:

    -fauto-inc-dec -fcprop-registers -fdce -fdefer-pop -fdelayed-branch -fdse -fguess-branch-probability -fif-conversion2 -fif-conversion -finline-small-functions
    -fipa-pure-const -fipa-reference -fmerge-constants -fsplit-wide-types -ftree-builtin-call-dce
    -ftree-ccp -ftree-ch -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-fre -ftree-sra -ftree-ter
    -funit-at-a-time

    На тех машинах, которые способны поддерживать отладку даже без указателя на стек функции, также включается опция -fomit-frame-pointer.
    На других машинах могут быть включены и другие флаги.

    -O2
    Оптимизирует еще больше. GCC выполняет почти все поддерживаемые оптимизации, которые не включают уменьшение времени исполнения за счет увеличения длины кода. Компилятор не выполняет раскрутку циклов или подстановку функций, когда вы указываете -O2. По сравнению с -O, эта опция увеличивает как время компиляции, так и эффективность сгенерированного кода.
    -O2 включает все флаги оптимизации наследованые от -O. Также включает следущие флаги оптимизации:

    -fthread-jumps
    -falign-functions -falign-jumps -falign-loops -falign-labels -fcaller-saves -fcrossjumping -fcse-follow-jumps -fcse-skip-blocks
    -fdelete-null-pointer-checks -fexpensive-optimizations -fgcse -fgcse-lm -findirect-inlining -foptimize-sibling-calls -fpeephole2
    -fregmove -freorder-blocks -freorder-functions -frerun-cse-after-loop -fsched-interblock -fsched-spec -fschedule-insns -fschedule-insns2 -fstrict-aliasing
    -fstrict-overflow -ftree-switch-conversion -ftree-pre -ftree-vrp

    -O3
    Оптимизирует еще немного. Включает все оптимизации -O2 и также включает флаги

    -finline-functions -funswitch-loops -fpredictive-commoning -fgcse-after-reload -ftree-vectorize

    Примечание: Как правило, это отрицательно сказывается на времени компиляции, а иногда и на производительности программ.

    -Os
    Включает оптимизацию по размеру. -Os флаг активирует все флаги оптимизации из -O2. в основном те, которые не увеличивают размер выходного файла. В дальнейшем выполняются оптимизации по уменьшению размера кода.
    -Os выключает следущие флаги оптимизации:

    -falign-functions -falign-jumps -falign-loops -falign-labels -freorder-blocks
    -freorder-blocks-and-partition -fprefetch-loop-arrays -ftree-vect-loop-version

    -Ofast
    только в gcc >=4.6
    включает все флаги -O3, а также -ffast-math

    Примечание: Более полное описание флагов -Ox, -fflag смотрите в man gcc, так как они специфичны для каждой из версий

    наибольший приоритет имеют опции объявленные последними — например:
    в -O2 есть -falign-labels, чтобы её отключить, надо указать -fno-align-labels ПОСЛЕ -O2

    (это широко используется при написании ebuild-ов, в которых объявляются свои опции сборки не зависимо от таковых в системе)

    (есть некоторые исключения, но они очень редки)

    • -pipe — передавать промежуточные данные по конвейеру (в оперативной памяти,а не через винт)
    • —param l2-cache-size=X (размер кэша 2-го уровня в килобайтах)
      можно посмотреть с помощью lscpu(но указывать лучше не реальный размер, а меньше.)
    • -fomit-frame-pointer — опция,которая говорит, что для доступа к переменным нужно использовать стек. С этой опцией практически невозможна отладка.
    • -funroll-loops — выполняется оптимизация развертыванием циклов. Осуществляется для циклов, число итераций которых может быть определено во время компиляции или во время выполнения.
    • -funroll-all-loops — выполняется оптимизация развертыванием циклов. Развертывает все циклы — обычно программы, скомпилированные с этой опцией, медленнее запускаются.
    • -ffast-math — эта опция разрешает GCC нарушать некоторые ANSI или IEEE правила и/или спецификации в интересах оптимизации кода по скорости выполнения. Например, это позволяет компилятору предполагать, что параметры к функции sqrt — неотрицательные числа.
      (с этой опцией не соберается dev-db/sqlite)
    • -malign-double — контролирует, выравнивает ли GCC double, long double и long long переменные на двусловной границе или однословной границе.
      Выравнивание double переменных на двусловной границе создает код, который выполняется на Pentium-процессорах несколько быстрее, расходуя больше памяти.
    • -march=X -mtune=X, при помощи этих опций создается код, оптимизированный под определенный CPU. Для Intel процессоров желательно задать -mtune=generic
    • -fno-align-labels — отключает -falign-labels, которая выравнивает каждый ярлык в коде (в основном начало каждого блока)(используется по умолчанию в -O2, -O3). Это всегда, кроме редких исключений, замедляет код и, следовательно, не должно использоваться. отсюда (давали профит на gcc-4.4.*, на 4.5 уже регресс)
    • -finline-functions — IPO

    -mmmx -msse -msse2 -msse3 -mssse3 -msse4.1 -m3dnow — наборы инструкций поддерживаемых процессором

    посмотреть для своего процессора можно в выводе

    cat / proc / cpuinfo | tr " " "\012" | grep -e sse -e mmx -e now -e pni | sort -u