Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746

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

09.11.2019, 11:12. Показов 3580. Ответов 23

Студворк — интернет-сервис помощи студентам
Всем привет!

Работаю сейчас в CodeBlocks 16 под Ubuntu 18.04. Частенько возникает задача определения библиотеки so.x.y, где находится определение функции. Пока что решаю ее тупым перебором. Выбираю библиотеку, имя которой более менее подходит, исходя из имени хэдера. Вывожу список экспортируемых этой библиотекой функций с помощью nm. Ищу нужное mangled name в списке. Однако вчера не смог найти библиотеку, где определена функция X509_free@@OPCUA_1.0.0. Соответственно, скомпоновать проект не удается пока.
Может есть какой-то иной, более "научный" способ решить эту задачу? Может есть ресурсы, где по имени функции можно найти библиотеку?

Заранее спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.11.2019, 11:12
Ответы с готовыми решениями:

Вопросы по динамическим библиотекам
Флаг -fPIC - это компиляция позиционно-независимого кода. Только из таких кодов можно сделать динамическую библиотеку с разделяемыми...

подключаемые библиотекам в брутфорсе(перебор по словарю) в win xp
здраствуйте, кодеры!!! необходимо код программы(брутфорса) из линуха(в линуксе работает, только как я понял для удаленных линукс машин),...

Литература по библиотекам
Подскажите где можно почитать про функции библиотек, как они записываются и т.д. Очень интересует библиотека ras.h

23
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
09.11.2019, 13:03
Цитата Сообщение от jugu Посмотреть сообщение
X509_free
Это функция из библиотеки libcrypto.so (в составе OpenSSL).
1
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
09.11.2019, 14:32  [ТС]
Да, это я уже понял, Единственная ремарка, что so это скрипт компоновщика, а не библиотека, насколько я знаю.
Но тут больше вопрос общего плана. Как быстро определить, где именно содержится реализация функции? Потому как копаться так с каждой функцией... это тот еще гемор ((
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
09.11.2019, 16:14
Цитата Сообщение от jugu Посмотреть сообщение
Да, это я уже понял, Единственная ремарка, что so это скрипт компоновщика, а не библиотека, насколько я знаю.
Ничего не понял. libcrypto.so - это разделяемая библиотека или символьная ссылка на нужную версию этой библиотеки
Bash
1
2
3
4
5
$ ls -l /usr/lib/i386-linux-gnu/libcrypto.*
-rw-r--r-- 1 root root 4015990 Sep 27 22:46 /usr/lib/i386-linux-gnu/libcrypto.a
lrwxrwxrwx 1 root root      16 Sep 27 22:46 /usr/lib/i386-linux-gnu/libcrypto.so -> libcrypto.so.1.1
-rw-r--r-- 1 root root 2107652 Jun 26 21:25 /usr/lib/i386-linux-gnu/libcrypto.so.1.0.2
-rw-r--r-- 1 root root 2536404 Sep 27 22:46 /usr/lib/i386-linux-gnu/libcrypto.so.1.1
Цитата Сообщение от jugu Посмотреть сообщение
Как быстро определить, где именно содержится реализация функции?
Обычно для этого используют утилиту pkg-config. Чаще всего, в качестве параметра командной строки компилятора.
Bash
1
2
$ pkg-config --libs openssl
-lssl -lcrypto
1
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
09.11.2019, 16:54  [ТС]
Цитата Сообщение от gng Посмотреть сообщение
libcrypto.so - это разделяемая библиотека или символьная ссылка на нужную версию этой библиотеки
А почему nm ее не распознает тогда как библиотеку?

Цитата Сообщение от gng Посмотреть сообщение
Обычно для этого используют утилиту pkg-config. Чаще всего, в качестве параметра командной строки компилятора.
Это не отвечает на мой вопрос. Еще раз его повторю: как найти библиотеку, где определена конкретная функция?

Добавлено через 11 минут
Еще раз подробнее опишу ситуацию.
Я делаю OPCUA-клиент под Убунту в CodeBlocks. При сборке вылезла unresolved reference на функцию X509_free. Путем загугливания я нашел, в какой библиотеке находится ее реализация. Потом вылезла unresolved reference на функцию sk_free. Тоже нашел библиотеку через доктора Гугла. Но это же ведь не дело так искать каждую функцию! Отсюда и вопрос. Может есть где ресурсы с описанием содержимого библиотек? Или какой-то хитрый способ...
1
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
09.11.2019, 18:01
Цитата Сообщение от jugu Посмотреть сообщение
Отсюда и вопрос. Может есть где ресурсы с описанием содержимого библиотек? Или какой-то хитрый способ...
Обычно перед использованием библиотеки программист изучает ее документацию.
И вот там почти всегда присутствует описание как правильно ее линковать.

Какого-то централизованного ресурса нет.

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

Поэтому только вдумчивое изучение всей документации, относящейся к библиотекам, которые вы планируете использовать в проекте.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
09.11.2019, 18:07
Цитата Сообщение от jugu Посмотреть сообщение
А почему nm ее не распознает тогда как библиотеку?
У меня все распознает
1
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
09.11.2019, 19:17  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
У меня все распознает
Подозреваю, что дело в ключике -AD

Добавлено через 2 минуты
Цитата Сообщение от DrOffset Посмотреть сообщение
Обычно перед использованием библиотеки программист изучает ее документацию.
И вот там почти всегда присутствует описание как правильно ее линковать.
Увы, это имеет место в идеальном мире. В реальности всегда вылезает какая-то unresolved external, и не знаешь, где ее искать.
В моем случае проект в Виртуал Боксе под виндой отлично скомпоновался, а в CodeBlocks под Убунтой начались проблемы...
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
09.11.2019, 19:39
Цитата Сообщение от jugu Посмотреть сообщение
Увы, это имеет место в идеальном мире. В реальности всегда вылезает какая-то unresolved external, и не знаешь, где ее искать.
Вы должны лучше понимать что у вас происходит в проекте. Если у вас под виндой по умолчанию линкуется какая-то библиотека, которая содержит нужные функции, то вы должны знать об этом. Или о том, что версии библиотек у вас разные на разных системах, и что в одной версии эти функции были, а в другой их нет (или они не требовались для данного примера, потому что макроконфигурация отличается). Или о том, что у вас используется другая библиотека, которая через себя подтянула требуемую и линковка разрешилась. И многие другие подобные нюансы.
Если же вы ну никак не можете определить причину, то уже можно поискать через nm или в google.

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

Цитата Сообщение от jugu Посмотреть сообщение
Подозреваю, что дело в ключике -AD
Дело в ключике -D. Он просто выводит динамические символы.
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
09.11.2019, 20:42
Цитата Сообщение от jugu Посмотреть сообщение
Это не отвечает на мой вопрос. Еще раз его повторю: как найти библиотеку, где определена конкретная функция?
Вы имеете в виду, что pkg-config НЕ ВСЕГДА подключает нужную библиотеку, если она установлена в системе стандартным образом? Соглашусь - не всегда. Но в вашем случае (openssl, X509_free. sk_free) достаточно было, учитывая, что проект использует openssl дописать к парамертам компилятора/линкера pkg-config --libs openssl.

Добавлено через 8 минут
PS. Как раз в Венде нужно вручную скачивать и располагать по каталогам библиотеки, разбираться с зоопарком этих библиотек и их версий, прописывать их расположение в параметры системы сборки и т.д.
В Линуксе это уже сделано за вас. Достаточно указать системе сборки через pkg-config, что вы используете openssl. Прще этого - только система модулей, которую в C++ вот уже лет 10 планируют ввети, но воз и ныне там.
0
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
09.11.2019, 22:03  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
Единого репозитория, который бы в соответствии с версиями и кросс-зависимостями выдавал вам информацию по доступным функциям - нет.
Эх, жаль...

Цитата Сообщение от gng Посмотреть сообщение
Как раз в Венде нужно вручную скачивать и располагать по каталогам библиотеки, разбираться с зоопарком этих библиотек и их версий, прописывать их расположение в параметры системы сборки и т.д.
Увы, приходится делать это и в Линуксе. По крайней мере, в настройках компилера CodeBlocks мне не удалось все настроить, чтоб линковка шла сразу без проблем.
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
09.11.2019, 22:36
Цитата Сообщение от jugu Посмотреть сообщение
По крайней мере, в настройках компилера CodeBlocks мне не удалось все настроить, чтоб линковка шла сразу без проблем.
Если:
1) библиотека openssl установлена из пакетов.
2) установлен pkg-config
то достаточно в опции линкера добавить
'pkg-config --libs openssl'
(одинарные ковычки обязательны)

Добавлено через 21 минуту
PS.
Цитата Сообщение от gng Посмотреть сообщение
(одинарные ковычки обязательны)
Прошу прощения за неточность - обратные одинарные ковычки ``
1
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
09.11.2019, 22:39  [ТС]
Дело не в openssl. Меня интересовала только возможность быстрого поиска библиотек, содержащих нужную функцию.
0
 Аватар для peter_irich
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,388
10.11.2019, 11:43
В я для этого использую небольшой скрипт, он у меня в ~/bin, а запускать его надо в каталоге,
где предположительно находится библиотека с искомой функцией с именем этой функции, как параметром.
Например, для поиска библиотеки с функцией sin() надо в /lib/x86_64-linux-gnu ввести команду
Code
1
fndlib_b_s sin
или
Code
1
fnd_lib_s_i sin
и в $HOME появится некий файл. Вот fndlib_b_s
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
 
rm -f ~/lib_s-lst
for bn in [ `/bin/ls *.so*` ]
do
if [ ! -h $bn ] && [ -f $bn ] ; then
echo $bn
#readelf -s $bn > ~/lst 2>&1
nm -C -D $bn > ~/lst    2>&1
#objdump -t $fn > lst
#fn=`grep -e "[[:print:]]" < ~/lst| grep -cE " ${1}"`
fn=`grep -e "[[:print:]]" < ~/lst| grep -cE "${1}"`
if [ $fn -gt 0 ] ; then
echo $bn $1 $fn
echo $bn $1 $fn >> ~/lib_s-lst 2>&1
#exit
fi
fi
done
rm -f ~/lst
вот fndlib_b_s_i, я только что добавил её

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash
 
rm -f ~/lib_s-lsti
for bn in [ `/bin/ls *.so*` ]
do
if [ ! -h $bn ] && [ -f $bn ] ; then
echo $bn
#readelf -s $bn > ~/lst 2>&1
nm -C -D $bn > ~/lst    2>&1
grep " i "  ~/lst > ~/lsti
#objdump -t $fn > lst
#fn=`grep -e "[[:print:]]" < ~/lst| grep -cE " ${1}"`
fn=`grep -e "[[:print:]]" < ~/lsti| grep -cE "${1}"`
if [ $fn -gt 0 ] ; then
echo $bn $1 $fn
echo $bn $1 $fn >> ~/lib_s-lsti 2>&1
#exit
fi
fi
done
rm -f ~/lst ~/lsti
1
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
10.11.2019, 13:11  [ТС]
Вот это уже интересненько.... Надо попробовать.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
10.11.2019, 16:19
Цитата Сообщение от jugu Посмотреть сообщение
Вот это уже интересненько....
...
Цитата Сообщение от DrOffset Посмотреть сообщение
Как вариант, можно написать скрипт, который пройдет по всем разделяемым библиотекам в системе и поищет в них требуемую функцию.
Однако это не спасет от ситуации, когда библиотеки физически нет в системе и ее надо поставить.
0
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
10.11.2019, 16:36  [ТС]
Вот жаль, что компоновщики не сообщают, в какой библиотеке эта функция расположена. Понимаю, что библиотек много всяких, но хотя бы для стандартных было бы неплохо...
А так, по-сути, процесс компоновки не изменился со времен MS-DOS, когда нам все приходилось прописывать ручками. Но это из риторического...
0
 Аватар для peter_irich
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,388
10.11.2019, 17:30
jugu, в справке на функцию может быть указано, какую библиотеку надо линковать,
например, в "man sin" сказано "-lm", т.е. искать и не надо.
0
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
10.11.2019, 17:46  [ТС]
Цитата Сообщение от peter_irich Посмотреть сообщение
jugu, в справке на функцию может быть указано, какую библиотеку надо линковать,
Да, бывает такое, но в меньшинстве случаев.
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
10.11.2019, 21:19
Цитата Сообщение от jugu Посмотреть сообщение
Вот жаль, что компоновщики не сообщают, в какой библиотеке эта функция расположена.
Откуда ему знать? Это не его задача.
Алгоритм примерно такой (на примере той же X509_free).
1) В man X509_free читаем:
#include <openssl/x509.h>
Из этого понятно, что функция относится к одной из либ проекта openssl
2) Проверяем, есть ли информация о openssl в локальной базе pkg-config
Bash
1
2
3
$ pkg-config --list-all | grep ssl
libssl                         OpenSSL-libssl - Secure Sockets Layer and cryptography libraries
openssl                        OpenSSL - Secure Sockets Layer and cryptography libraries and tools
Имя openssl зарегистрировано в системе.
Смотрим опции копоновщика для либ
Bash
1
2
$ pkg-config --libs openssl
-lssl -lcrypto
Пути для заголовков
Bash
1
2
pkg-config --cflags openssl
<пусто>
Пусто, значит указанный в мане заголовок ищется по стандартным путям и не требует доп. опций компилятору.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.11.2019, 21:19
Помогаю со студенческими работами здесь

Документация к библиотекам
Написал библиотеку в которой 1 метод using System; namespace ClassLibrary1 { public class Class1 { ///...

Путь к библиотекам
Подскажите плиз. Я ,как говориться, ещё только учусь .Так вот у меня книга по паскалю 7,0 , на компе установлен 7.0.В книжке приведены...

Какими библиотекам пользуетесь?
Какие родные и нестандартные библиотеки вы используете в программировании с использованием C#?

Справочник по стандартным библиотекам c++
Доброго времени суток! Подскажите, пожалуйста, где можно найти максимально подробное описание библиотек c++ (с описанием функций...

Путь к qt библиотекам qt creator
учу qt по книге шлее qt 4.8. Так вот первая программа: #include &lt;QtGui&gt; int main(int agrc, char **argv) { QApplication...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru