- Как узнать версию gcc, используемую для сборки linux?
- Решение
- Главное предостережение
- Другие решения
- gentoo, можно ли узнать каким компилятором был собран пакет?
- Компилируем и запускаем программы C, C++ в Linux
- Установка необходимых инструментов
- Установка в Arch Linux
- Установка средств разработки в RHEL, CentOS
- Установка инструментов разработки в Debian, Ubuntu и дистрибутивы
- Скрипт Mangi
- Установка инструментов разработки в openSUSE/SUSE
- Проверка установки
- Настройка среды разработки
- Компиляция и запуск программ C, C++
- Компиляция и запуск программ на C
- Компиляция и запуск программ на C++
- Просмотр информации о библиотеке Linux / исполняемой версии
Как узнать версию gcc, используемую для сборки linux?
Я использую OpenWRT. это дистрибутив Linux для встраиваемых систем
Я хочу знать версию gcc, используемую для компиляции Linux
Я сделал некоторые исследования в сети, но безрезультатно.
Я пытался выполнить эти команды для некоторого существующего двоичного файла в Linux OpenWRT (например, wget)
Но я не получил никакого результата
не дает никакого результата
Есть ли способ узнать, используется ли gcc для сборки всего linux (как для пользовательского пространства, так и для пространства ядра)?
Решение
Для программ это появляется в .comment раздел исполняемых файлов ELF, если ваша система использует ELF.
Компилятор, используемый для компиляции ядра, доступен из строки в /proc/version , например:
Главное предостережение
.comment раздел не является обязательным. Многие дистрибутивы удаляют его из исполняемого файла, когда исполняемый файл упакован в пакет. Раздел будет помещен в отдельный пакет отладки.
Например, в моей системе:
После установки libcurl3-dbg пакет, мы получаем изображение с разделенными разделами, следуя ссылке отладки GNU:
Другие решения
Для построения рабочего пространства OpenWRT используется ваш основной gcc:
Для кросс-компиляции все необходимые инструменты находятся под вами openwrt build dir.
GCC, используемый во время компиляции, можно найти в staging directory OpenWRT. Перейдите в домашнюю директорию openwrt и найдите toolchain каталог под постановочный реж. Здесь вы найдете bin каталог, в котором находятся все инструменты кросс-компиляции.
Например для ar71xx :
Источник
gentoo, можно ли узнать каким компилятором был собран пакет?
$subject, предположим что в системе установленно 2 gcc или вообще (clang и gcc) известно что emerge -e world компилятором по умолчанию не делался. Можно узнать каким именно компилятором был собран пакет? Спасибо.
Иногда программы содержат информацию об использованном для сборки компиляторе в выхлопе —help, -v —version или окошке About
Либо по разным косвенным признакам, служебной информации, особенностям сгенерированного кода и т.д.
portage по умолчанию стрипает бинарники, так что вытащить служебную информацию, думаю, не выйдет.
Открой бинарник в текстовом редакторе, ГЦЦ иногда вставляет информацию про себя.
а где портаж хранит инфу об установленных пакетах?
/var/lib/portage/world — тут пакеты из world
/var/db/pkg/ — тут вся информация
Открой бинарник в текстовом редакторе, ГЦЦ иногда вставляет информацию про себя.
Я тоже так думал, пока не попробовал:
насколько я помню выпилили. раньше в var/db/ было явно.
Ну так скомпилируй clang’ом. Там найдешь то же самое (подозреваю, что это строчка из gcc’шного рантайма).
readelf -p .comment /path/to/binary
Гента, настройки линкера дефолтные.
/me запилил следующее в /etc/portage/bashrc
Это ни разу не прув для отсутствия инфы.
FEATURES=«nostrip» emerge -e world. Только бинарники распухнут, решение megabaks лучше
формально это неверно, хотя решение интересное, кстати я вроде писал на ЛОР официальный ответ по этому поводу.
$(CC) можно ж переопределить, и не уверен, что tc-get не может в выдать другую версию gcc отличную от текущей. Но 95% случаев этот хук точно покрывает.
$CC тут не используется
а вызов gcc происходит с учётом $ROOTPATH, овер которую я и переключаю версию gcc для капризных пакетов, не затрагивая соседние
так что работает
по крайней мере у меня
а менять $CC просто глупо (имхо) — частенько при сборке вызывается именно gcc, а не желаемый
Источник
Компилируем и запускаем программы C, C++ в Linux
Это краткое руководство объясняет, как компилировать и запускать программы на Си/Си++ в операционной системе GNU/Linux.
Если вы студент или новый пользователь Linux, который переходит с платформы Microsoft, то вам может быть интересно, как запускать программы на Си или Си++ в дистрибутиве Linux. Мы должны понимать, что компиляция и запуск кода на платформах Linux немного отличается от Windows.
Установка необходимых инструментов
Как вы, наверное, уже понимаете, для запуска кода нужно установить необходимые инструменты и компиляторы для работы. Ниже мы опишем как установить все инструменты разработки в Linux.
Для работы и тестирования у нас должен быть сервер с Linux. Лучший вариант — это VPS. В зависимости от географии проекта обычно выбирают две страны для серверов — VPS США и VPS России.
В этом кратком руководстве мы обсудим, как установить средства разработки в такие дистрибутивы Linux, как Arch Linux, CentOS, RHEL, Fedora, Debian, Ubuntu, openSUSE и др.
Эти средства разработки включают в себя все необходимые приложения, такие как компиляторы GNU GCC C/C++, make, отладчики, man-страницы и другие, которые необходимы для компиляции и сборки нового программного обеспечения и пакетов.
Инструменты разработчика могут быть установлены как по отдельности, так и все сразу. Мы собираемся установить все сразу, чтобы нам было намного проще работать.
Установка в Arch Linux
Для установки средств разработки в Arch Linux и его дистрибутивов, таких как Antergos, Manjaro Linux, просто запустите:
Вышеуказанная команда установит следующие пакеты в ваши системы на базе Arch:
Просто нажми ENTER, чтобы установить их все.
Если вы хотите установить пакет в определенную группу пакетов, просто введите его номер и нажмите ENTER, чтобы продолжить установку.
Установка средств разработки в RHEL, CentOS
Для установки средств разработки в Fedora, RHEL и его клонах, таких как CentOS, Scientific Linux, выполните следующие команды как пользователь root:
Вышеуказанная команда установит все необходимые инструменты разработчика, например:
- autoconf
- automake
- bison
- byacc
- cscope
- ctags
- diffstat
- doxygen
- elfutils
- flex
- gcc/gcc-c++/gcc-gfortran
- git
- indent
- intltool
- libtool
- patch
- patchutils
- rcs
- subversion
- swig
Установка инструментов разработки в Debian, Ubuntu и дистрибутивы
Для установки необходимых инструментов разработчика в системах на базе DEB, запустите:
Эта команда предоставит все необходимые пакеты для настройки среды разработки в Debian, Ubuntu и его дистрибутивов.
- binutils
- cpp
- gcc-5-locales
- g++-multilib
- g++-5-multilib
- gcc-5-doc
- gcc-multilib
- autoconf
- automake
- libtool
- flex
- bison
- gdb
- gcc-doc
- gcc-5-multilib
- and many.
Теперь у Вас есть необходимые средства разработки для создания программного обеспечения в Linux.
Скрипт Mangi
Если Вам не нравится метод установки средств разработки выше, есть также скрипт под названием «сценарий манги» (mangi), доступный для легкой настройки среды разработки в DEB-системах, таких как Ubuntu, Linux Mint и других производных Ubuntu.
После свежей установки Ubuntu возьмите этот скрипт из репозитория GitHub, сделайте его исполняемым и начните установку всех необходимых инструментов и пакетов для настройки полной среды разработки. Вам не нужно устанавливать инструменты один за другим.
Этот скрипт установит следующие среды разработки и инструменты на вашу систему Linux:
- Node.js
- NVM
- NPM
- Nodemon
- MongoDB
- Forever
- git
- grunt
- bower
- vim
- Maven
- Loopback
- curl
- python
- jre/jdk
- gimp
- zip unzip and rar tools
- filezilla
- tlp
- erlang
- xpad sticky notes
- cpu checker
- kvm acceleration
- Calibre Ebook Reader (I often use it to read programming books
- Dict – Ubuntu Dictionary Database and Client (CLI based)
Сначала установите следующее:
Скачайте скрипт манги, используя команду:
Извлеките загруженный архив:
Вышеуказанная команда распакует zip-файл в папку под названием mangi-script-master в вашей текущей рабочей директории. Перейдите в каталог и сделайте скрипт исполняемым, используя следующие команды:
Наконец, запустите скрипт с помощью команды:
Пожалуйста, имейте в виду, что этот скрипт не полностью автоматизирован. Вам необходимо ответить на ряд вопросов «Да/Нет» для установки всех инструментов разработки.
Установка инструментов разработки в openSUSE/SUSE
Для настройки среды разработки в openSUSE и SUSE enterprise выполните следующие команды от имени root пользователя:
Проверка установки
Теперь проверим, были ли установлены средства разработки или нет. Для этого запустите:
Как видно из приведенного выше вывода, средства разработки были успешно установлены. Теперь можно начать разрабатывать свои приложения.
Настройка среды разработки
Скрипт под названием ‘mangi’ поможет вам настроить полное окружение в системах на базе Ubuntu.
Еще раз, после установки необходимых средств разработки проверить их можно с помощью одной из следующих команд:
Эти команды покажут путь установки и версию компилятора gcc.
Компиляция и запуск программ C, C++
Сначала посмотрим, как скомпилировать и запустить простую программу, написанную на языке Си.
Компиляция и запуск программ на C
Напишите свой код/программу в любимом редакторе CLI/GUI.
Я собираюсь написать свою программу на Си с помощью редактора nano.
Примечание. Вам необходимо использовать расширение .c для программ на Си или .cpp для программ на Си++.
Скопируйте/вставьте следующий код:
Нажмите Ctrl+O и Ctrl+X для сохранения и выхода из файла.
Чтобы скомпилировать программу, запустите:
Если в вашем коде/программе есть синтаксические или семантические ошибки, они будут отображены. Сначала необходимо их исправить, чтобы двигаться дальше. Если ошибки нет, то компилятор успешно сгенерирует исполняемый файл ostechnix в текущем рабочем каталоге.
Наконец, запустите программу с помощью команды:
Вы увидите вывод, как показано ниже:
Чтобы скомпилировать несколько исходных файлов (например, source1 и source2) в исполняемый файл, запустите:
Для разрешения предупреждений, необходима отладка символов на выходе:
Скомпилировать исходный код в инструкции ассемблера:
Скомпилировать исходный код без связывания:
Вышеприведенная команда создаст исполняемый файл под названием source.o.
Если ваша программа содержит математические функции:
За более подробной информацией обращайтесь к man-страницам (страницы руководства).
Компиляция и запуск программ на C++
Напишите вашу C++ программу в любом редакторе по вашему выбору и сохраните ее с расширением .cpp.
Пример простой C++ программы:
Чтобы скомпилировать эту программу на C++ в Linux, просто запустите:
Если ошибок не было, то можно запустить эту Си++ программу под Linux с помощью команды:
В качестве альтернативы мы можем скомпилировать приведенную выше программу на C++, используя команду «make«, как показано ниже.
Вы заметили? Я не использовал расширение .cpp в вышеприведенной команде для компиляции программы. Нет необходимости использовать расширение для компиляции Си++ программ с помощью команды make.
Запустите, используя команду:
За более подробной информацией обращайтесь к man-страницам.
Источник
Просмотр информации о библиотеке Linux / исполняемой версии
В Windows EXE и DLL имеют информацию о версии, включая, по крайней мере, следующие поля:
- версия файла
- версия продукта
- внутреннее имя
- наименование товара
- авторское право
В Linux Library / Исполняемый файл:
- Какие поля присутствуют?
- Как просмотреть такую информацию?
- Какие инструменты / библиотеки читать?
Информация о версии явно не сохраняется в файле ELF . У вас есть название библиотеки, в soname которую входит основная версия. Полная версия обычно хранится как часть имени файла библиотеки.
Если у вас есть, скажем libtest.so , библиотека , то у вас обычно есть:
- libtest.so.1.0.1 — сам файл библиотеки, содержащий полную версию
- libtest.so.1 — Ссылка на libtest.so.1.0.1 , имеющая то же имя, что и soname
- libtest.so — Симлинк, libtest.so.1 используемый для ссылки.
В файле библиотеки libtest.so.1.0.1 будет SONAME динамическая секция, которая будет называть эту библиотеку вызываемой libtest.so.1 . Когда вы связываете программу с этой библиотекой, связанная программа будет хранить входящую soname библиотеку NEEDED в динамическом разделе.
Если вы хотите проверить, что именно находится в ELF-файле, вы можете попробовать запустить:
где elffile может быть библиотека исполняемого файла.
Если вы просто хотите получить версию библиотеки, вы можете поиграть с:
AFAIK, такой информации нет (по крайней мере, по умолчанию) в исполняемых файлах.
Или вы можете положиться на саму программу или свою систему упаковки, как писал Рахул Патил.
Источник