27 / 25 / 5
Регистрация: 22.04.2010
Сообщений: 772

Как подключить стороннюю библиотеку (*.so) к проекту

15.02.2012, 12:53. Показов 21448. Ответов 18
Метки нет (Все метки)

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

Добавлено через 46 минут
Среда разработки Eclipse, язык C++
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.02.2012, 12:53
Ответы с готовыми решениями:

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

Подключить стороннюю NDK-библиотеку к своему NDK-проекту
Пытаюсь подключить к своему (на самом деле не совсем своему) NDK-проекту стороннюю библиотеку libpng (http://www.libpng.org). Содержимое...

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

18
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
15.02.2012, 16:58
гуглить на предмет ключика "-l"
0
27 / 25 / 5
Регистрация: 22.04.2010
Сообщений: 772
15.02.2012, 18:29  [ТС]
Цитата Сообщение от niXman Посмотреть сообщение
гуглить на предмет ключика "-l"
в моем случае у меня есть библиотека в виду трех файлов:
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

Кто-нибудь может прокомментировать, почему одна библиотека представлено в виде трех этих файлов?
Я догадываюсь, что тут может быть особенность подключения...
0
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
15.02.2012, 20:08
Цитата Сообщение от sitesv Посмотреть сообщение
1. libSUSI-3.02.so (link);
2. libSUSI-3.02.so.1 (Soname);
это ссылки на libSUSI-3.02.so.1.0.8, созданные для совместимости

Добавлено через 8 минут
Цитата Сообщение от sitesv Посмотреть сообщение
Как ее задействовать?
тебе надо будет скомпилировать файл в gcc с опцией:
Bash
1
gcc -o имя_программы исходник.c -lSUSI-3.02
Где -lSUSI-3.02 - это имя библиотеки (без lib и .so). Часть имени .so в файле библиотеки говорит, что это динамическая библиотека.

про подключение библиотек
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
15.02.2012, 20:33
Цитата Сообщение от niXman Посмотреть сообщение
гуглить на предмет ключика "-l"
Цитата Сообщение от remarkes Посмотреть сообщение
тебе надо будет скомпилировать файл в gcc с опцией
Человек спрашивает, как из Eclipse их использовать, а не из командной строки

Цитата Сообщение от sitesv Посмотреть сообщение
Кто-нибудь может прокомментировать, почему одна библиотека представлено в виде трех этих файлов?
Файл *.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 по прежнему будут цеплять старую версию, потому что не факт, что с новой версией оно будет работать нормально из-за изменённых интерфейсов или сильно изменённой внутренней реализацией. Таким образом у тебя в системе могут жить несколько версий одной и той же динамической библиотеки
1
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
15.02.2012, 21:41
Цитата Сообщение от Evg Посмотреть сообщение
как из Eclipse их использовать
задать вопрос на форуме поддержки эклипса? не?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
15.02.2012, 22:07
Цитата Сообщение от niXman Посмотреть сообщение
задать вопрос на форуме поддержки эклипса? не?
Если есть желание поучить человека правильно задавать вопросы - попробуй. Я всего лишь указал на то, что человек задавал один вопрос, а отвечали ему на другой
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
15.02.2012, 22:35
Цитата Сообщение от Evg Посмотреть сообщение
задавал один вопрос, а отвечали ему на другой
айдишек - гребанный вагон и тележка, а GCC - один!
я вообще вопрос посчитал шуткой) разве стал бы кто-то спрашивать про линковку с .so в эклипсе, когда он умеет это делать просто в ручную, да еще и в разделе С++ + линукс связь какая-то ооочень отдаленная от тематики раздела.

более того, я вообще считаю что обсуждение айдишек не имеет ничего общего с программированием. этим темам самое место в обсуждении софта.
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
15.02.2012, 22:45
Цитата Сообщение от niXman Посмотреть сообщение
я вообще считаю что обсуждение айдишек не имеет ничего общего с программированием
Я тоже так считаю. Но это вовсе не означает, что все так считают. Если человек пришёл с вопросом на форум - значит он явно что-то не знает. Если человек работает в IDE, то он скорее всего не умеет работать с командной строкой, а потому не надо его этим грузить (да и не нужно оно ему на данном этапе, т.к. он ищет ответ на свой вопрос). Люди, работающие в IDE, далеко не всегда знают, где граница между IDE и компилятором, или в чьей зоне ответственности лежит вопрос: в зоне ответственности IDE, компилятора, операционной системы или где-то ещё. Он программирует на Си++ под линуксом, вот и зашёл в правильный по его мнению раздел форума. Я бы тоже сюда зашёл
1
27 / 25 / 5
Регистрация: 22.04.2010
Сообщений: 772
15.02.2012, 23:39  [ТС]
Спасибо за помощь, завтра обязательно попробую и отпишу!
0
310 / 233 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
16.02.2012, 10:38
Цитата Сообщение от Evg Посмотреть сообщение
Человек спрашивает, как из Eclipse их использовать, а не из командной строки
ой, а я подумал - это подпись пользователя
0
27 / 25 / 5
Регистрация: 22.04.2010
Сообщений: 772
17.02.2012, 13:14  [ТС]
Спасибо большое! Все заработало! Ура-Ура-Ура!
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
17.02.2012, 14:17
Цитата Сообщение от sitesv Посмотреть сообщение
Спасибо большое! Все заработало! Ура-Ура-Ура!
Для истории поделись, что конкретно ты сделал. Другим это может оказаться полезным
0
27 / 25 / 5
Регистрация: 22.04.2010
Сообщений: 772
17.02.2012, 14:47  [ТС]
из-за своей неопытности, в настройках проекта я подключал библиотеку libSUSI-3.02.so, а надо было, как Вы подсказали, SUSI-3.02.

Спасибо огромное!
0
27 / 25 / 5
Регистрация: 22.04.2010
Сообщений: 772
12.05.2012, 08:55  [ТС]
Доброго дня!
Столкнулся с проблемой...
В случае удаленной отладки с использованием библиотеки SUSI-3.02 (а именно при запуске программы Remote System Manager'ом) возникает ошика
C++
1
Thread [1] 1645 (Suspended: Signal: SIGILL: Illegal instruction)
Давно уже не юзал проект с внешней библиотекой... Тут решил реанимировать проект.
Произошло это после того, как я перезаписал находящиеся библиотеки в /usr/lib
(устанавливал библиотеки командой make install: которая значала удаляет их из папки /usr/lib, а потом из исходного каталога с библотекой копирует их туда же).
Не могу никак закрыть этот баг...
Если в настройках проекта убрать подключение SUSI-3.02 и, соответственно, закомментировать все вызываемые из нее функции, то проект нормально удаленно запускается..
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
12.05.2012, 10:13
Для очистки совести попробуй перекомпилировать проект. А то мало ли новая версия библиотеки в чём-то несовместима со старой
0
27 / 25 / 5
Регистрация: 22.04.2010
Сообщений: 772
12.05.2012, 11:12  [ТС]
Тут момент следующий отмечу:
когда делал "make install" библиотеки, появилось следующее сообщение:
"make: предупреждение: Неправильный ход часов. Сборка может быть неполной."
Что это такое и как оно может влиять на работу?

Добавлено через 8 минут
Установил системное время в биосе, распаковал по-новой архив, сделал make install. все прошло нормально.
При запуске программы, происходит ошибка инициализации библиотеки:
C++
1
SusiDllInit() failed
Раньше программка запусказалась нормально. Не подскажите в какую сторону смотреть?

Добавлено через 28 минут
Запустил на аналогичном ПК, все заработало.
Вот почему на первом ПК херня творится ((
Такое ощущение, то в системе остались "ошметки" какие-то...
Нельзя как-нибудь продиагностировать систему на этот предмет?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
12.05.2012, 13:39
Цитата Сообщение от sitesv Посмотреть сообщение
Что это такое и как оно может влиять на работу?
make по времени созданиф файлов определяет, нужно пересобирать модуль или нет. Т.е. если исходник имеет более позднее время обновления, чем соответствующий объектник, то пересобирать нужно. При сборке с нуля это роли не играет. При сборке поверх существующей сборки - играет роль если ты что-то модифицируешь. Ну это общий принцип на пальцах. Реально зависит от того, как Makefile написан

Цитата Сообщение от sitesv Посмотреть сообщение
Вот почему на первом ПК херня творится ((
Такое ощущение, то в системе остались "ошметки" какие-то...
Бесплатный колхоз, фигли ты думал

Цитата Сообщение от sitesv Посмотреть сообщение
Нельзя как-нибудь продиагностировать систему на этот предмет?
Много раз наблюдал стандартное заблуждение. Человек купил джип и теперь считает, что можно в говнах ездить. А то, что для этого нужно иметь соотвествующие навыки, обычно никто не задумывается до тех пор, пока за трактором не побежит. С опенсорсом всё то же самое. То, что программы в исходниках, это вовсе не означает, что первый попавшийся дурак всё с ходу соберёт. Нужно всё-таки понимать, как это устроено и что вообще ты делаешь
1
27 / 25 / 5
Регистрация: 22.04.2010
Сообщений: 772
12.05.2012, 13:54  [ТС]
Evg, стараюсь все делать осознанно...
Оказалось что-то с настройками bios, обновил их по default'у.
Все зафурычило!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.05.2012, 13:54
Помогаю со студенческими работами здесь

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

Как подключить библиотеку к проекту
Не могу понять почему не работает. Папку заголовков и папку с библиотекой выбрал, линковщику добавил cryptopp.lib, cryptopp.lib и...

Как подключить библиотеку к конкретному проекту?
Доброго времени суток:) Возникла необходимость воспользоваться пакетом Graphics32 (http://graphics32.org/wiki/), но как его подключить,...

Как подключить к проекту библиотеку, написанную на C++
Здравствуйте! Есть замечательная библиотека математических функций http://harrix.org/main/product_library_harrix_math_dll.php dll...

Как подключить библиотеку к проекту и в папку
Я знаю как подключать библиотеки, но волнует вопрос, как подключить, чтобы файл dll был в подпапке (напр. "libs"), а не в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

Новые блоги и статьи
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
PowerShell и онлайн сервисы. Валюта (floatrates.com руб.)
iNNOKENTIY21 11.11.2025
PowerShell функция floatrates-rub Примеры вызова: # Указанная валюта 'EUR' floatrates-rub -Code 'EUR' # Список имеющихся кодов валют floatrates-rub -Available function floatrates-rub {
PowerShell и онлайн сервисы. Погода (RP5.ru)
iNNOKENTIY21 11.11.2025
PowerShell функция Get-WeatherRP5rss для получения погоды с сервиса RP5 Примеры вызова Get-WeatherRP5rss с указанием id 5484 — Москва (восток, Измайлово) и переносом строки:. . .
PowerShell и онлайн сервисы. Погода (wttr)
iNNOKENTIY21 11.11.2025
PowerShell Функция для получения погоды с сервиса wttr Примеры вызова: Погода в городе Омск с прогнозом на день, можно изменить прогноз на более дней, для этого надо поменять запрос:. . .
PowerShell и онлайн сервисы. Валюта (ЦБР)
iNNOKENTIY21 11.11.2025
# Получение курса валют function cbr (] $Valutes = @('USD', 'EUR', 'CNY')) { $url = 'https:/ / www. cbr-xml-daily. ru/ daily_json. js' $data = Invoke-RestMethod -Uri $url $esc = 27 . . .
И решил я переделать этот ноут в машину для распределенных вычислений
Programma_Boinc 09.11.2025
И решил я переделать этот ноут в машину для распределенных вычислений Всем привет. А вот мой компьютер, переделанный из ноутбука. Был у меня ноут асус 2011 года. Со временем корпус превратился. . .
Мысли в слух
kumehtar 07.11.2025
Заметил среди людей, что по-настоящему верная дружба бывает между теми, с кем нечего делить.
Новая зверюга
volvo 07.11.2025
Подарок на Хеллоуин, и теперь у нас кроме Tuxedo Cat есть еще и щенок далматинца: Хочу еще Симбу взять, очень нравится. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru