- В LINUX определить, является ли библиотека .a библиотекой 32-разрядной или 64-разрядной?
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Как определить разрядность Linux-системы
- Как узнать, является ли мой Linux 32-битным или 64-битным?
- Linux знает информацию об архитектуре процессора
- Узнайте,процессор работает d 32-битный или 64-битный в системе Linux
- Как я узнаю, является ли мой Linux 32-битным или 64-битным?
- Другая команда Linux, чтобы проверить, есть ли у меня 32-битная или 64-битная ОС
- Примечание о методе GUI
- Используйте команду lshw
- Заключение
- Библиотеки в Ubuntu
- Что такое библиотеки
- Установка библиотек в Ubuntu
- Управление библиотеками в Linux
- Выводы
В LINUX определить, является ли библиотека .a библиотекой 32-разрядной или 64-разрядной?
Мы распространяем в Linux статическую библиотеку как в 64-битной, так и в 32-разрядной версиях. При устранении неполадок с клиентом я бы хотел, чтобы моя диагностическая оболочка script быстро устранила проблему, проверив файл .a архива, чтобы определить, 32 или 64 бит. Методы, которые происходят со мной, менее элегантны:
извлечь член .o и запросить команду «файл» (например, 32-битный ELF и т.д.)
начать включать фиктивный элемент, закодированный для указания, например. 32bit.o/64bit.o и использовать «ar -t» для проверки
Я пробовал «строки xyz.a | grep 32», но это не очень хорошо работает над версиями. Не проблема с сердцем, но если вы знаете об элегантном решении, я хотел бы знать.
ОТВЕТЫ
Ответ 1
objdump выглядит наилучшим образом:
Ответ 2
Самый простой способ — использовать команду file.
Ответ 3
Просто используйте команду file; т.е. file library.so
Ответ 4
Если есть функции, специфичные для конкретной версии, вы можете попробовать nm, затем grep для функции.
Ответ 5
oops, что отсутствующий sed означает, что он отображает многие элементы.
Как раз в ответ:
Как это должно работать:
- nm — получить символы из библиотеки
- grep — получить строки, начинающиеся с шестнадцатеричной строки (адрес символа в файле)
- head — получить первую строку
- sed — удалить все пробелы, включая пробелы
- wc — подсчитать количество символов.
В 32-битной среде вы получаете адреса, состоящие из 8 шестнадцатеричных цифр, добавляя новую строку: 9 . В 64-битной среде вы получаете адреса, состоящие из 16 шестнадцатеричных цифр, добавляя новую строку. 17 .
Источник
Как определить разрядность 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:
В первой строке «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 и операционных систем.
Источник
Библиотеки в Ubuntu
Как вы знаете каждая программа, установленная на вашем компьютере, состоит из нескольких частей. Это непосредственно исполняемый файл, который вы запускаете через терминал, а также библиотеки с набором функций, которые может использовать программа.
Все, без исключения, программы используют библиотеки. Даже если это ваша программа и у нее нет своих библиотек, она использует стандартную библиотеку языка программирования С.
В этой статье мы подробно рассмотрим что такое библиотеки Ubuntu, как их устанавливать, где брать и что делать если библиотека установлена, а программа говорит что ее нет. Мы не будем трогать создание библиотек, это совсем не наша тема. Как обычно, начнем с теории.
Что такое библиотеки
Библиотеки в Linux содержат наборы функций или если сказать проще алгоритмов или действий для решения определенных задач. Например, если программе нужно вывести строку на экран она не начинает сама закрашивать нужные пиксели, а просто обращается к отвечающей за это функции из библиотеки, то же самое если программе нужно прочитать содержимое файла, она не работает с секторами жесткого диска, ей достаточно вызвать функцию из стандартной библиотеки с (libc.so) и передать ей в параметрах имя нужного файла, а библиотека уже вернет ей запрашиваемые данные.
На самом деле, такая структура реализации программного обеспечения очень выгодна, поскольку достаточно написать алгоритм лишь один раз и его смогут использовать все программы просто загружая библиотеку.
Не нужно думать что библиотеки есть только в Linux, в Windows они тоже есть, только имеют другой формат и расширение dll. В Linux же все библиотеки находятся в папах /lib/, /usr/lib, /usr/local/lib или для 64 битных систем также появляется папка lib64 во всех этих подкаталогах, для библиотек специфичных для этой архитектуры. Библиотека имеет расширение .so и ее название начинается со слова lib. Например, libfuse.so, libc.so.
Дальше, после расширения файла .so идет номер версии библиотеки. Номер версии меняется всякий раз, когда разработчики вносят в нее изменения ломающие совместимость со всеми рассчитанными на нее программами. В таком случае в системе будут уже две библиотеки и каждая программа будет использовать правильную версию. Например, glibc.so.6 и glibc.so.5.
Если интересно можно даже посмотреть какие библиотеки и каких версий, использует та или иная программа, например:
linux-vdso.so.1 (0x00007ffd99167000)
libmount.so.1 => /usr/lib64/libmount.so.1 (0x00007f0f6beb0000)
libc.so.6 => /lib64/libc.so.6 (0x00007f0f6bb08000)
libblkid.so.1 => /usr/lib64/libblkid.so.1 (0x00007f0f6b8c8000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f0f6b6a4000)
/lib64/ld-linux-x86-64.so.2 (0x000055aca8227000)
libuuid.so.1 => /usr/lib64/libuuid.so.1 (0x00007f0f6b49f000)
libpcre.so.1 => /usr/lib64/libpcre.so.1 (0x00007f0f6b238000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f0f6b034000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f0f6ae17000)
Также эта информация может быть полезна при создании портативных версий программ. А теперь давайте рассмотрим как устанавливаются библиотеки в Ubuntu.
Установка библиотек в Ubuntu
Обычно, если вы используете менеджер пакетов вашего дистрибутива для установки новых программ, то библиотеки устанавливаются автоматически. Но если вы хотите собрать программу из исходников или запустить 32 битную программу на 64 битной системе могут начаться проблемы. Например, при запуске или компиляции программы вы получаете ошибку:
error while loading shared libraries: xxxx.so.0
cannot open shared object file no such file or directory
Обычно, в Ubuntu имена пакетов библиотек соответствуют имени нужной библиотеки. Поэтому чтобы определить точное имя в большинстве случаев достаточно воспользоваться поиском по базе пакетов:
apt search libfuse
Как видите, найдено два варианта библиотеки, libfuse2 и libfuse-dev.
Если библиотека нужна обычной программе и ее не нужно собирать из исходников, то будет достаточно установить библиотеку ubuntu без префикса dev. Например:
sudo apt install libfuse2
Если же вам нужно собрать приложение из исходников, то кроме обычной библиотеки понадобятся заголовочные файлы, в которых содержится описание реализованных в библиотеке функций. Такие пакеты имеют приставку dev, например, libfuse-dev, тогда нужно устанавливать этот пакет, а он уже в зависимостях потянет и обычную библиотеку, если она еще не установлена:
sudo apt install libfuse-dev
Много проблем может вызвать ситуация, когда вам нужно запустить 32 битную программу в 64 битной системе. Например, если вы установили 64 битную версию библиотеки, а программа все равно говорит о том, что не может ее найти, возможно это 32 битная программа и ей необходима именно 32 библиотека. Если программа не устанавливается с помощью пакетного менеджера, вам тоже придется устанавливать библиотеки вручную.
Посмотреть разрядность бинарника можно с помощью утилиты file:
На скриншоте показаны два варианта вывода программы, для 32 бит, в нашем случае Skype и для 64 — mount.
Для того чтобы установить библиотеку Ubuntu с архитектурой i386 сначала необходимо добавить поддержку архитектуры i386 в dpkg:
sudo dpkg —add-architecture i386
Затем обновляем наши репозитории:
sudo apt update
А во время установки нужной вам библиотеки теперь необходимо указать архитектуру через двоеточие после имени пакета:
sudo apt install libfuse-dev:i386
Если вы уверенны, что библиотека установлена, но программа все равно говорит, что такой библиотеки нет, то возможно, ей просто нужна другая версия библиотеки. Например, в системе есть libudev.so.0, а программе нужна libudev.so.0.1. Такое случается, если вы попытаетесь установить пакет для другого дистрибутива, особенно в Red Hat системах. Если в репозиториях нет нужной версии библиотеки, то скорее всего, они одинаковы, и можно просто создать символическую ссылку:
ln -s /lib/libudev.so.0 /lib/libudev.so.0.1
Затем программа найдет нужную библиотеку.
Управление библиотеками в Linux
Установка библиотек ubuntu уже рассмотрена, но хотелось бы упомянуть еще пару моментов. Как я сказал, библиотеки ubuntu размещаются в определенных каталогах, но расположение библиотек можно настроить.
Перед тем как библиотека будет подключена к программе, ее должна найти в системе специальная программа — менеджер библиотек. Он берет адреса библиотек из файла /etc/ld.cache, а этот файл формируется утилитой ldconfig, на основе файлов конфигурации /etc/ld.so.conf.
В этом файле перечислены все пути к библиотекам. Если вы хотите добавить свою папку для библиотек просто добавьте ее в этот файл:
Затем обновите кэш просто выполнив:
Теперь ваша библиотека может быть загружена программой, например, вы можете добавить путь /opt/lib или даже /home/user/lib. И система будет нормально грузить оттуда библиотеки.
Посмотреть какие библиотеки находятся в кеше ld.cache можно командой:
Также мы можем проверить находится ли там определенная библиотека:
ldconfig -p | grep libjpeg
Еще один способ указать программе где нужно искать библиотеки — это переменная LD_LIBRARY_PATH. Например:
Теперь программы, запускаемые в этом терминале, кроме стандартных путей поиска библиотек, будут использовать и указанную папку.
Выводы
Вот и все. Теперь вы знаете как работают библиотеки Ubuntu, как выполняется установка библиотек Ubuntu и делать так, чтобы программа видела нужную ей библиотеку. У новичков это может вызвать очень много головной боли, но теперь вы знаете что делать и избежите многих ошибок. Если у вас остались вопросы, пишите в комментариях!
Источник