So linux как установить

Обновлено: 04.07.2024

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

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

Однако вместо того, чтобы компилировать его в собственном двоичном коде программы, SO-файл служит расширением, которое программа просто должна вызвать, чтобы использовать ее утилиты. Файл SO даже может быть обновлен/заменен позже без необходимости внесения каких-либо изменений в собственный код.

Файлы общей библиотеки аналогичны файлам динамической библиотеки (DLL), используемым в Windows, и файлам динамической библиотеки Mach-O (DYLIB) в macOS, за исключением того, что файлы SO находятся в системах на базе Linux и в ОС Android.

SO не просто ссылается на файл общей библиотеки. Это также аббревиатура для параметров сервера , объект службы , перегрузка системы , только отправка , сбой системы , последовательный вывод и застрял в открытом состоянии . Однако не путайте это с ОС, аббревиатурой от операционной системы.

Как открыть файл SO

SO файлы могут быть технически открыты с помощью GNU Compiler Collection, но эти типы файлов не предназначены для просмотра или использования так же, как файлы другого типа. Вместо этого они просто помещаются в соответствующую папку и автоматически используются другими программами через загрузчик динамических ссылок Linux.

Однако вы можете прочитать SO-файл как текстовый файл, открыв его в текстовом редакторе, таком как Leafpad, gedit, KWrite или Geany, если вы работаете в Linux, или Notepad ++ в Windows. Маловероятно, однако, что текст будет в удобочитаемом формате.

Как конвертировать SO файлы

Нам неизвестно о каких-либо программах, которые могут конвертировать SO в DLL для использования в Windows, и, учитывая, что эти файлы делают, они вряд ли есть. Это также не простая задача конвертировать SO в другие форматы файлов, такие как JAR или A (файл Stat Library).

Возможно, вы сможете «конвертировать» SO-файлы в JAR-файлы, просто заархивировав их в формат архивного файла, например .ZIP, а затем переименовав его в .JAR.

Дополнительная информация о файлах SO

Вот лишь несколько примеров: libdaemon.SO.14 , libchromeXvMC.SO.0 , libecal-1.2.SO.100 , libgdata.SO.2 и libgnome-bluetooth.SO.4.0.1 .

Число в конце позволяет иметь несколько версий одного и того же файла, не вызывая проблем с перекрывающимися именами. Эти файлы обычно хранятся в /lib/ или /usr/lib/.

На устройстве Android SO файлы хранятся в APK в /lib //. Здесь «ABI» может быть папкой с именем armeabi , armeabi-v7a , arm64-v8a , mips , mips64 , x86 или x86_64 . Файлы SO в правильной папке, которая относится к устройству, используются для установки приложений через файл APK.

Файлы общей библиотеки иногда называют динамически связанными библиотеками общих объектов , общими объектами , общими библиотеками и библиотеками общих объектов .

Все еще не можете открыть файл?

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

Например, формат файла ISO является популярным форматом, который во многом похож на «.SO» в конце файла, но оба они не связаны и не могут открываться с помощью одних и тех же программ.

Другой пример можно увидеть с файлами SOL, которые являются файлами локальных общих объектов Flash. Они используются с Adobe Flash и не связаны с SO-файлами.

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

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

В этой статье мы подробно рассмотрим что такое библиотеки 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

library

Как видите, найдено два варианта библиотеки, libfuse2 и libfuse-dev.

Если библиотека нужна обычной программе и ее не нужно собирать из исходников, то будет достаточно установить библиотеку ubuntu без префикса dev. Например:

sudo apt install libfuse2

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

sudo apt install libfuse-dev

Много проблем может вызвать ситуация, когда вам нужно запустить 32 битную программу в 64 битной системе. Например, если вы установили 64 битную версию библиотеки, а программа все равно говорит о том, что не может ее найти, возможно это 32 битная программа и ей необходима именно 32 библиотека. Если программа не устанавливается с помощью пакетного менеджера, вам тоже придется устанавливать библиотеки вручную.

Посмотреть разрядность бинарника можно с помощью утилиты file:

library3

На скриншоте показаны два варианта вывода программы, для 32 бит, в нашем случае Skype и для 64 - mount.

Для того чтобы установить библиотеку Ubuntu с архитектурой i386 сначала необходимо добавить поддержку архитектуры i386 в dpkg:

sudo dpkg --add-architecture i386

Затем обновляем наши репозитории:

sudo apt update

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

sudo apt install libfuse-dev:i386

library1

Если вы уверенны, что библиотека установлена, но программа все равно говорит, что такой библиотеки нет, то возможно, ей просто нужна другая версия библиотеки. Например, в системе есть 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

library2

Еще один способ указать программе где нужно искать библиотеки - это переменная LD_LIBRARY_PATH. Например:

Теперь программы, запускаемые в этом терминале, кроме стандартных путей поиска библиотек, будут использовать и указанную папку.

Выводы

Вот и все. Теперь вы знаете как работают библиотеки Ubuntu, как выполняется установка библиотек Ubuntu и делать так, чтобы программа видела нужную ей библиотеку. У новичков это может вызвать очень много головной боли, но теперь вы знаете что делать и избежите многих ошибок. Если у вас остались вопросы, пишите в комментариях!

так что файл «Общий объект»или файл библиотеки, содержащий скомпилированный код, который можно связать с программой во время выполнения. Это Linux-эквивалент Windows DLL (библиотеки динамической компоновки).

Как вы используете файл .so в Linux?

Вы должны использовать параметр компоновщика -rpath , который сообщает компоновщику добавить информацию в исполняемую программу, где найти библиотеки времени выполнения, такие как ваш. так файл. Это передаст -rpath = $ (pwd) компоновщику, а $ (pwd) заставит оболочку вызвать команду pwd для возврата текущего каталога.

Как мне прочитать файл .so?

Однако вы можете прочитать файл SO как текстовый файл, открыв его в текстовый редактор, например Leafpad, gedit, KWriteили Geany, если вы используете Linux, или Notepad ++ в Windows.

Что такое Dlopen в Linux?

dlopen () Функция dlopen () загружает файл динамического общего объекта (разделяемой библиотеки), названный строкой с завершающим нулем filename и возвращает непрозрачный «дескриптор» загруженного объекта. … Если имя файла содержит косую черту («/»), то оно интерпретируется как (относительный или абсолютный) путь.

Смотрите также Какая клавиша F для восстановления системы Windows 10?

Что такое Ldconfig в Linux?

ldconfig создает необходимые ссылки и кеширует самые последние общие библиотеки находится в каталогах, указанных в командной строке, в файле / etc / ld. … Ldconfig проверяет заголовок и имена файлов обнаруженных библиотек, определяя, в каких версиях следует обновить ссылки.

Есть ли в Linux библиотеки DLL?

Работают ли файлы DLL в Linux? dll (библиотека динамической компоновки) написан для среды Windows, и не будет работать изначально под Linux. Вам, вероятно, придется извлечь его и перекомпилировать как файл. так что - и если это не была оригинальность, скомпилированная с помощью Mono, вряд ли это сработает.

Как открыть общую библиотеку в Linux?

Создав общую библиотеку, вы захотите установить ее. Простой подход - это просто скопировать библиотеку в один из стандартных каталогов (например, / usr / lib) и запустите ldconfig (8). Наконец, когда вы компилируете свои программы, вам нужно сообщить компоновщику обо всех статических и общих библиотеках, которые вы используете.

Что такое lib файл?

Библиотеки состоят из набор связанных функций для выполнения общей задачи; например, стандартная библиотека C, libc. a ', автоматически подключается к вашим программам компилятором «gcc» и находится в / usr / lib / libc. … A: статические, традиционные библиотеки. Приложения связываются с этими библиотеками объектного кода.

Есть вопрос про подключение сторонних библиотек к проекту.
У меня есть библиотека aaa.so, header файл bbb.h, и код, который использует функции из этой библиотеки. Как ее задействовать?

Добавлено через 46 минут
Среда разработки Eclipse, язык C++

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь


Как в проект подключить библиотеку?
Есть компилятор GCC и графическая библиотека, как ее можно подключить? Компилю через консоль.

Подключить стороннюю NDK-библиотеку к своему NDK-проекту
Пытаюсь подключить к своему (на самом деле не совсем своему) NDK-проекту стороннюю библиотеку.


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

Как подключить стороннюю динамическую библиотеку?
как подключить стороннюю динамическую библиотеку(написана на с++) как нюансы?

в моем случае у меня есть библиотека в виду трех файлов:
1. libSUSI-3.02.so (link);
2. libSUSI-3.02.so.1 (Soname);
3. libSUSI-3.02.so.1.0.8 (real name);

они находятся в /usr/lib

Кто-нибудь может прокомментировать, почему одна библиотека представлено в виде трех этих файлов?
Я догадываюсь, что тут может быть особенность подключения.

это ссылки на libSUSI-3.02.so.1.0.8, созданные для совместимости

Добавлено через 8 минут

тебе надо будет скомпилировать файл в gcc с опцией:

Где -lSUSI-3.02 - это имя библиотеки (без lib и .so). Часть имени .so в файле библиотеки говорит, что это динамическая библиотека.

тебе надо будет скомпилировать файл в gcc с опцией

Человек спрашивает, как из Eclipse их использовать, а не из командной строки

Кто-нибудь может прокомментировать, почему одна библиотека представлено в виде трех этих файлов? Файл *.so используется линкером в процессе запуска компилятора. Т.е. линкер вынимает некоторую информацию и кладёт её в полученный исполняемый файл. В частности, в исполняемый файл кладётся информация о том, что такая-то динамическая библиотека нужна для исполнения. В данном *.so записано, что для исполнения получившегося бинарника потребуется файл libSUSI-3.02.so.1 (это так называемый SONAME). В процессе запуска бинарника будет использоваться именно это имя файла. Ну а файл libSUSI-3.02.so.1.0.8 - это конкретная реализация. Может случиться так, что разработчики исправят ошибку в библиотеке, но оставят неизменным интерфейс. Тогда они отдадут тебе файл libSUSI-3.02.so.1.0.9, а ссылка 3.02.so.1 начнёт смотреть на новый файл. Таким образом свою программу тебе не придётся пересобирать. При очередном запуске через ссылку libSUSI-3.02.so.1 она в момент исполнения подцепит новую версию библиотеки libSUSI-3.02.so.1.0.9. Далее разработчики выпустят новую версию библиотеки с новыми интерфейсами. Тогда они назовут её libSUSI-3.02.so.2.0.0 и рядом положат ссылку libSUSI-3.02.so.2, а ещё и перенастроят libSUSI-3.02.so. В этом случае при перекомпиляции программы у тебя подцепится новая версия библиотеки. Но уже существующие бинарники в момент исполнения через libSUSI-3.02.so.1 по прежнему будут цеплять старую версию, потому что не факт, что с новой версией оно будет работать нормально из-за изменённых интерфейсов или сильно изменённой внутренней реализацией. Таким образом у тебя в системе могут жить несколько версий одной и той же динамической библиотеки Если есть желание поучить человека правильно задавать вопросы - попробуй. Я всего лишь указал на то, что человек задавал один вопрос, а отвечали ему на другой

айдишек - гребанный вагон и тележка, а GCC - один!
я вообще вопрос посчитал шуткой) разве стал бы кто-то спрашивать про линковку с .so в эклипсе, когда он умеет это делать просто в ручную, да еще и в разделе С++ + линукс связь какая-то ооочень отдаленная от тематики раздела.

более того, я вообще считаю что обсуждение айдишек не имеет ничего общего с программированием. этим темам самое место в обсуждении софта.

я вообще считаю что обсуждение айдишек не имеет ничего общего с программированием Я тоже так считаю. Но это вовсе не означает, что все так считают. Если человек пришёл с вопросом на форум - значит он явно что-то не знает. Если человек работает в IDE, то он скорее всего не умеет работать с командной строкой, а потому не надо его этим грузить (да и не нужно оно ему на данном этапе, т.к. он ищет ответ на свой вопрос). Люди, работающие в IDE, далеко не всегда знают, где граница между IDE и компилятором, или в чьей зоне ответственности лежит вопрос: в зоне ответственности IDE, компилятора, операционной системы или где-то ещё. Он программирует на Си++ под линуксом, вот и зашёл в правильный по его мнению раздел форума. Я бы тоже сюда зашёл Спасибо за помощь, завтра обязательно попробую и отпишу! Человек спрашивает, как из Eclipse их использовать, а не из командной строки Для истории поделись, что конкретно ты сделал. Другим это может оказаться полезным

из-за своей неопытности, в настройках проекта я подключал библиотеку libSUSI-3.02.so, а надо было, как Вы подсказали, SUSI-3.02.

Доброго дня!
Столкнулся с проблемой.
В случае удаленной отладки с использованием библиотеки SUSI-3.02 (а именно при запуске программы Remote System Manager'ом) возникает ошика
Давно уже не юзал проект с внешней библиотекой. Тут решил реанимировать проект.
Произошло это после того, как я перезаписал находящиеся библиотеки в /usr/lib
(устанавливал библиотеки командой make install: которая значала удаляет их из папки /usr/lib, а потом из исходного каталога с библотекой копирует их туда же).
Не могу никак закрыть этот баг.
Если в настройках проекта убрать подключение SUSI-3.02 и, соответственно, закомментировать все вызываемые из нее функции, то проект нормально удаленно запускается.. Для очистки совести попробуй перекомпилировать проект. А то мало ли новая версия библиотеки в чём-то несовместима со старой

Добавлено через 8 минут
Установил системное время в биосе, распаковал по-новой архив, сделал make install. все прошло нормально.
При запуске программы, происходит ошибка инициализации библиотеки:

Раньше программка запусказалась нормально. Не подскажите в какую сторону смотреть?

Добавлено через 28 минут
Запустил на аналогичном ПК, все заработало.
Вот почему на первом ПК херня творится ((
Такое ощущение, то в системе остались "ошметки" какие-то.
Нельзя как-нибудь продиагностировать систему на этот предмет?

Читайте также: