Форум программистов, компьютерный форум, киберфорум
С++ под Linux
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/79: Рейтинг темы: голосов - 79, средняя оценка - 4.62
25 / 23 / 4
Регистрация: 22.04.2010
Сообщений: 728
1

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

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


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

Добавлено через 46 минут
Среда разработки Eclipse, язык C++
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.02.2012, 12:53
Ответы с готовыми решениями:

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

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

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

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

18
Эксперт С++
3210 / 1458 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
15.02.2012, 16:58 2
гуглить на предмет ключика "-l"
0
25 / 23 / 4
Регистрация: 22.04.2010
Сообщений: 728
15.02.2012, 18:29  [ТС] 3
Цитата Сообщение от 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
308 / 231 / 15
Регистрация: 01.07.2011
Сообщений: 812
Записей в блоге: 1
15.02.2012, 20:08 4
Цитата Сообщение от 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
21153 / 8169 / 628
Регистрация: 30.03.2009
Сообщений: 22,468
Записей в блоге: 30
15.02.2012, 20:33 5
Цитата Сообщение от 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
Эксперт С++
3210 / 1458 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
15.02.2012, 21:41 6
Цитата Сообщение от Evg Посмотреть сообщение
как из Eclipse их использовать
задать вопрос на форуме поддержки эклипса? не?
0
Evg
Эксперт CАвтор FAQ
21153 / 8169 / 628
Регистрация: 30.03.2009
Сообщений: 22,468
Записей в блоге: 30
15.02.2012, 22:07 7
Цитата Сообщение от niXman Посмотреть сообщение
задать вопрос на форуме поддержки эклипса? не?
Если есть желание поучить человека правильно задавать вопросы - попробуй. Я всего лишь указал на то, что человек задавал один вопрос, а отвечали ему на другой
0
Эксперт С++
3210 / 1458 / 73
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
15.02.2012, 22:35 8
Цитата Сообщение от Evg Посмотреть сообщение
задавал один вопрос, а отвечали ему на другой
айдишек - гребанный вагон и тележка, а GCC - один!
я вообще вопрос посчитал шуткой) разве стал бы кто-то спрашивать про линковку с .so в эклипсе, когда он умеет это делать просто в ручную, да еще и в разделе С++ + линукс связь какая-то ооочень отдаленная от тематики раздела.

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

Спасибо огромное!
0
25 / 23 / 4
Регистрация: 22.04.2010
Сообщений: 728
12.05.2012, 08:55  [ТС] 15
Доброго дня!
Столкнулся с проблемой...
В случае удаленной отладки с использованием библиотеки 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
21153 / 8169 / 628
Регистрация: 30.03.2009
Сообщений: 22,468
Записей в блоге: 30
12.05.2012, 10:13 16
Для очистки совести попробуй перекомпилировать проект. А то мало ли новая версия библиотеки в чём-то несовместима со старой
0
25 / 23 / 4
Регистрация: 22.04.2010
Сообщений: 728
12.05.2012, 11:12  [ТС] 17
Тут момент следующий отмечу:
когда делал "make install" библиотеки, появилось следующее сообщение:
"make: предупреждение: Неправильный ход часов. Сборка может быть неполной."
Что это такое и как оно может влиять на работу?

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

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

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

Цитата Сообщение от sitesv Посмотреть сообщение
Нельзя как-нибудь продиагностировать систему на этот предмет?
Много раз наблюдал стандартное заблуждение. Человек купил джип и теперь считает, что можно в говнах ездить. А то, что для этого нужно иметь соотвествующие навыки, обычно никто не задумывается до тех пор, пока за трактором не побежит. С опенсорсом всё то же самое. То, что программы в исходниках, это вовсе не означает, что первый попавшийся дурак всё с ходу соберёт. Нужно всё-таки понимать, как это устроено и что вообще ты делаешь
1
25 / 23 / 4
Регистрация: 22.04.2010
Сообщений: 728
12.05.2012, 13:54  [ТС] 19
Evg, стараюсь все делать осознанно...
Оказалось что-то с настройками bios, обновил их по default'у.
Все зафурычило!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2012, 13:54

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

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

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

Как подключить к проекту библиотеку, написанную на C++
Здравствуйте! Есть замечательная библиотека математических функций...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.