Как узнать разрядность библиотеки linux

Как определить разрядность Linux-системы

Всегда полезно знать хотя бы основные характеристики операционной системы, под которой приходится работать на компьютере. Например, может понадобиться знать разрядность операционной системы — 32-битная или 64-битная? Это для случая, когда при установке дополнительной программы необходимо выбрать, программу какой разрядности нужно скачать, чтобы установить ее в системе.

Конечно, в Ubuntu Software Center имеется большое количество самых разнообразных программ под операционную систему Ubuntu Linux. Однако, иногда может возникнуть потребность установить программу из стороннего источника, который предлагает на выбор как 32-битная, так и 64-битную версию одной и той же программы. И какую версию программы выбрать в этом случае?

В этой статье будут описаны несколько способов определения, какая разрядность у операционной системы Linux — 32-битная или 64-битная. Некоторые из этих способов предоставляют даже больше информации, нежели только разрядность системы.

Первые два способа используют консольную команду uname , которая выводит требуемую информацию в окне терминала. Если требуется получить больше информации о системе, то необходимо запустить команду uname с флагом -a :

В результате в окне терминала отобразится информация в следующем порядке:

  • имя ядра операционной системы
  • сетевое имя машины (hostname)
  • номер релиза ядра операционной системы
  • версия ядра операционной системы
  • имя машины
  • тип центрального процессора
  • платформа
  • операционная система

В отображаемом командой списке разрядность системы — это первые цифры после локального времени машины (изображения в статье кликабельны):

К примеру, если система 64-битная, то в консоли это будет обозначено как x86_64 ; если система 32-битная, то в консоли это будет обозначено как i686 или i386 . Обратите внимание, что в выводе программы uname тип центрального процессора и платформа обозначаются точно также, как и разрядность операционной системы.

Если с помощью команды uname необходимо получить только разрядность операционной системы, то достаточно запустить ее в окне терминале с флагом -m :

Эта команда отобразит имя машины и, помимо этого, покажет разрядность операционной системы — 32-битная ( i686 или i386 ) или же 64-битная ( x86_64 ):

Консольная команда arch аналогична команде uname с флагом -m . В окне терминала также отобразится разрядность операционной системы — 32-битная ( i686 или i386 ) или же 64-битная ( x86_64 ). Для этого нужно в консоли ввести имя команды arch и запустить ее, нажав клавишу Enter :

Еще одной консольной командой для вывода информации о разрядности операционной системы является команда file с указанием специального аргумента /sbin/init . В окне терминала нужно ввести команду вида:

В консоли будет выведено много информации, из которой в данном случае необходима только первая строка (точнее — начало этой строки) — . ELF 64-bit LSB . :

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

Примечание переводчика: в этом случае будьте готовы к тому, что в разных Desktop Environments (GNOME Shell, Cinnamon, Xfce, KDE, Unity) и Window Managers (Enlightenment, Fluxbox, Xfce и так далее) местонахождение нужной информации может быть каждый раз разным. Консольные утилиты в этом плане более универсальные.

Рассмотрим получение информации о разрядности операционной системы на примере Linux Mint 17.1 Cinnamon. В главном меню системы выбираем пункт «System Settings». В открывшемся окне «System Settings» находим в разделе «Hardware» иконку «System Info». Откроется одноименное окно с информацией об операционной системе Linux:

Читайте также:  Windows color scheme changing

В первой строке «Operating System» видим тип операционной системы и ее разрядность.

Источник

Как узнать, является ли мой Linux 32-битным или 64-битным?

Мне нужно выяснить, работает ли мой сервер Linux в 32-битной или 64-битной системе.

Как я узнаю, является ли мой Linux 32-битным или 64-битным?

Чтобы проверить, работает ли на вашем сервере Linux 32-битная или 64-битная система, попробуйте следующую команду

  • Получить ВСЕ данные о ЦП в Linux, Выполнить: lscpu или cat /proc/cpuinfo
  • У меня работает ядро Linux 32-битное или 64-битное? Выполнить: getconf LONG_BIT
  • Мой процессор в 32-битном или 64-битном режиме? Запустите: grep -o -w ‘lm’ /proc/cpuinfo | grep -у

Linux знает информацию об архитектуре процессора

Введите следующую команду lscpu:

Из приведенного выше вывода ясно, что у меня есть:

  • Процессор: AMD A10-6800K APU with Radeon(tm) HD Graphics
  • Архитектура: x86_64
  • Процессор может работать: 32-битная или 64-битная операционная система

Узнайте,процессор работает d 32-битный или 64-битный в системе Linux

Просто запустите следующую команду grep

Флаг lm означает процессор в длинном режиме, то есть 64-битный процессор.

Для получения дополнительной информации введите следующую команду cat, чтобы получить полную информацию о вашем процессоре:

Как я узнаю, является ли мой Linux 32-битным или 64-битным?

Теперь вы знаете, что у вас есть процессор AMD, который может работать как в 32-битной, так и в 64-битной операционных системах.

Но как узнать, является ли мое текущее ядро и дистрибутив Linux 64-битным или 32-битным?

Не бойтесь, выполните следующую команду:

Команда getconf проверяет, является ли ядро Linux 32-битным или 64-битным.

64 означает, что у меня 64-битное ядро Linux и дистрибутив Linux.

Другая команда Linux, чтобы проверить, есть ли у меня 32-битная или 64-битная ОС

Для 64-битных вы получите x86_64 и i386 для 32-битных процессоров Intel.

Примечание о методе GUI

Откройте дистрибутив Linux, окно «Настройки» и выберите «Сведения о системе»:

Используйте команду lshw

Выполните следующую команду lshw, чтобы вывести всю информацию о процессоре:

Заключение

Вы узнали, что большинство серверов на базе Intel и компьютер могут работать как с 32-битной, так и с 64-битной операционной системой.

Далее вы узнали различные параметры командной строки, чтобы определить, используете ли вы 32-разрядную или 64-разрядную версию ядра Linux и операционных систем.

Источник

Просмотр информации о библиотеке Linux / исполняемой версии

В Windows EXE и DLL имеют информацию о версии, включая, по крайней мере, следующие поля:

  1. версия файла
  2. версия продукта
  3. внутреннее имя
  4. наименование товара
  5. авторское право

В Linux Library / Исполняемый файл:

  • Какие поля присутствуют?
  • Как просмотреть такую ​​информацию?
  • Какие инструменты / библиотеки читать?

Информация о версии явно не сохраняется в файле ELF . У вас есть название библиотеки, в soname которую входит основная версия. Полная версия обычно хранится как часть имени файла библиотеки.

Читайте также:  Не работает эквалайзер realtek windows 10

Если у вас есть, скажем 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, такой информации нет (по крайней мере, по умолчанию) в исполняемых файлах.

Или вы можете положиться на саму программу или свою систему упаковки, как писал Рахул Патил.

Источник

[C/C++][x32, x64] Как узнать разрядность платформы на этапе препроцессинга?

Вопрос в следующем. Существует ли какой-нибудь кроссплатформенный метод определения разрядности платформы на этапе препроцессинга?

Гоголь показывает только:

и какое-то дикое обсуждение:

Но нам нужно другое — способ, работающий и в GCC Linux, и в винде, и с разными компиляторами.

У кого-нибудь готовое условие не завалялось?

#if defined(__LP64__) || defined(_M_IA64)

где-то так наверное

Вот потому что ищещь по виндовым терминам, потому и находишь только win64. Эти архитектуры называются x86, amd64/x86-64.

> #if defined(__LP64__) || defined(_M_IA64)

Так наверно или точно?

> Так наверно или точно?

первое для gcc, второе для msvc, надо что-то еще — ищи сам

неужели так сложно (U)LONG_MIN/MAX проверить?

а где вы псдений раз видели 32-хбитную платформу?

толсто, у меня все домашние системы 32-битные.

Просто в другом месте нахожу:

#if defined(LP64) || defined(_LP64)

#if defined(__LP64__) || defined(_M_IA64)

верить не надо, есть документация, для gcc:

«Starting with GCC 3.4, all LP64 platforms will define the macros __LP64__»
ftp://gcc.gnu.org/pub/gcc/summit/2003/Porting%20to%2064%20bit.pdf

там множество решений

Спасибо, на этом и остановлюсь.

я имею в виду 32-хбитный процессор. Все процессоры, выпущенные за последние года 3 имеют 64-битную архитектуру. Давайте все таки не считать пользователей за дуарков, которые будут ставить 32-хбитную ОС на 64-хбитный процессор.

А корректно ли определять через размер size_t?

> А корректно ли определять через размер size_t?

технически — да, но в стандарте, насколько я знаю, размер size_t не указан, т.е. может зависеть от реализации

> Давайте все таки не считать пользователей за дуарков, которые будут ставить 32-хбитную ОС на 64-хбитный процессор.

Но такие есть, и им пофигу на разрядность.

да? Жаль. Я всех своих знакомых на работе пересадил на x86_64 OS (Ubuntu в данном случае)

Пересади меня! А то мне с моим старым ноутом у которого всего 1гб памяти и процом core duo который не держит 64бита как-то ссыкотно переходить.

Вот лол так лол.

> Я всех своих знакомых на работе пересадил на x86_64 OS (Ubuntu в данном случае)

мой п4, которому лет 6 — написано, что умеет amd64 — на деле — нет(

>верить не надо, есть документация

Читайте также:  Linux не работает клавиатура мышь

Everybody lies. Это только на IA-64 определено (Itanium).

ясно, да — по названию можно было догадаться, поверил описанию

Но зачем? Если памяти меньше 4G, Вы ничего не выиграете, а наоборот, т.к. 64х-битные приложения требуют больше памяти.

Это действительно нужно? Обычно лучше использовать типы известного размера, например int64_t, u_int32_t и т.п. (см. /usr/include/sys/types.h).

ISO/IEC 9899:1999 → 7.18.1.1 → 3) These types are optional.

Хуже того: их нет даже в MSVC, поэтому там придётся использовать __int64. Он был приведён для примера.

> Хуже того: их нет даже в MSVC

> их нет даже в MSVC
> даже в MSVC

/me подавился пивом…

где написано? на intel.com ? и да, поздние p4 держали x86-64

на винде оно sizeof(long) не зависит от архитектуры x86/x86-64

Я бы распарсил в cmake uname. Или из /proc можно попытаться информацию извлечь. А вот как это сделать в мастдае — понятия не имею.

Где? В своей коробочной русской MS Visual Studio 2008 Professional не нашёл.

Осторожнее надо. IMO сей компилятор — второй по распространённости, если не первый.

Про кроccкомпиляцию мусье не слышал?

Зато для линукса это самое простое решение. А как там в мастдае — понятия не имею. Но для cmake можно сделать проверку на ОС и, в зависимости от нее, вызывать тот или иной велосипед.

кроccкомпиляция подразумевает сборку и под линукс, но другой архитектуры, как самый простой вариант — 32 бита из под 64-битной системы

У ТСа такой задачи не было. Так что не запутывайте.

И, кстати, ЕМНИП, без ВМ не получится (я уже как-то пытался себе дженту 64-битную закомпилять, не пользуясь ВМ — ничего не вышло).

> И, кстати, ЕМНИП, без ВМ не получится

В мане написано, что это для сборки вроде 32бита из-под 64-х. Но что-то у меня, несмотря на всякие ключики в make, 64-битное ядро компилироваться 32-битным gcc не стало.

> Но что-то у меня, несмотря на всякие ключики в make, 64-битное ядро компилироваться 32-битным gcc не стало.

КО говорит, что ты просто не умеешь

Зато для линукса это самое простое решение.

Заканчивай уже пить пиво, оно у вас там с веществами, однозначно.

Молодцы, оперативно работают. Но закладываться на последнюю версию компилятора неправильно IMO.

Сделать проверку компилятора проще на порядки. И безо всяких cmake, а прямо в коде. Для Windows есть набор define’ов, которые устанавливают все компиляторы, а в Linux с вероятностью 99% используется GCC. Способа, который работал бы везде и всегда, AFAIK нет. Даже если бы он был в стандартах, всегда найдётся кто-нибудь, кто им соответствует не полностью.

> Молодцы, оперативно работают.

ну им еще http://gcc.gnu.org/projects/cxx0x.html догонять и догонять, и, как я понял, для Visual Studio vNext более-менее полная поддержка C++0x не ставится как задача

>Существует ли какой-нибудь кроссплатформенный метод определения разрядности платформы на этапе препроцессинга?

Для начала надо определить понятие разрядности платформы. И преследуемые цели. Правильная постановка вопроса — это половина ответа. Иначе будет «что 100? а что приборы?». Реализация С на 64-битовой платформе теоретически может быть полностью 32-битовой (без 64-битовых целых типов и указателей). Как и наоборот.

Источник

Оцените статью