Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.74/34: Рейтинг темы: голосов - 34, средняя оценка - 4.74
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696

Путь к библиотеке в бинарнике

20.12.2011, 16:55. Показов 7095. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кто-нибудь в курсе, как задать относительный путь в .so-шке в бинарнике? К примеру, чтобы в одной папке с бинарем лежала so-шка и он к ней по относительному пути (./so_name.so) обращался. Че-то опцию никак отыскать не могу...

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

Путь к внутренней библиотеке
Как в .pro файле правильно прописать путь к библиотеке, которая собирается в папку проекта? Делаю так, но это с ошибкой: LIBS +=...

Найти путь к библиотеке
Ребят,привет. Первый раз с linux работаю,подскажите. Установил на Ubuntu 16 пакет библиотеки libcpprest-dev с помощью apt-get...

Нужно в access прописать относительный путь к библиотеке
Задача прописать относительный путь к библиотеке относительно запущенного файла mdb Private Declare Function GetPadeg Lib...

30
 Аватар для denix
65 / 65 / 5
Регистрация: 11.01.2009
Сообщений: 130
20.12.2011, 23:39
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Vourhey Посмотреть сообщение
да, сейчас шелл-скрипт в одну строчку просто запускает LD_LIBRARY_PATH=. ./program $@
Но чисто ради любопытства интересно, как сделать...
да обычно так и делают. про -rpath-link очень даже интересно, буду ждать твоего результата
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
20.12.2011, 23:53
потестил.
so`шка:
C
1
2
3
int summ(int a, int b) {
   return a+b;
}
основная прога:
C
1
2
3
4
5
int summ(int, int);
 
int main() {
   return summ(2, 3);
}
so`шку собираю так:
>gcc summ.c -shared -osumm.so

прогу так:
>gcc main.c -omain summ.so -Wl,-rpath=./

so`шка и прога лежат в одном каталоге. каталог в PATH не прописан.

выполянем:
> ./main; echo $?

вывод:
> 5

если же линковать так:
>gcc main.c -omain summ.so -Wl,-rpath-link=./
или так:
>gcc main.c -omain summ.so

то при запуске получаем: ./main: error while loading shared libraries: summ.so: cannot open shared object file: No such file or directory

значит -rpath свою работу делает.
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
21.12.2011, 00:00
Цитата Сообщение от niXman Посмотреть сообщение
или так:
>gcc -Wl,-rpath-link=./
Опция -rpath-link влияет ВО ВРЕМЯ ЛИНКОВКИ только на то, что ищется среди NEEDED (т.е. путь поиска зависимостей самОй библиотеки)

Опция -rpath влияет уже на пути поиска во время исполнения (загрузки) и делает по сути дела то же самое, что и переменная окружения LD_LIBRRAY_PATH (только пути поиска зашивается в бинарник). Других способов задать пути поиска нет. Есть ещё дефолтные пути поиска (типа /lib, /usr/lib) и дефолтные системные пути поиска (что-то типа в файле /etc/ld.so.<чего-то там уже не помню>)

Относительного пути поиска в run-time скорее всего нет. Процесс загрузки происходит следующим образом. Ядро загружает в память a.out и загружает в область динамических библиотек ld.so. Далее передаётся управление на ld.so. Т.е. в момент работы ld.so сам бинарник уже лежит в памяти, а потому для дальнейшей работы абсолютный путь для бинарника скорее всего не нужен и относительный путь поиска скорее всего будет трактоваться как относительный путь относительно каталога запуска (а не относительно каталога, в котором лежит бинарник)

Если есть желание, то можно посмотреть в исходниках glibc: файл elf/dl-load.c функция open_path, пути поиска находятся в четвёртом параметре struct r_search_path_struct *sps
http://sourceware.org/git/?p=g... 43;hb=HEAD

Добавлено через 6 минут
Запускать можно

Code
1
$ LD_DEBUG=all ./a.out
И далее в выдаче поковыряться на предмет того, где реально вёл поиск ld.so. Ну и на основании этого поймёшь, как трактуются относительные пути
1
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
21.12.2011, 01:11  [ТС]
Цитата Сообщение от niXman Посмотреть сообщение
gcc main.c -omain summ.so -Wl,-rpath=./
блин, у меня такая фигня не работает, тестил сегодня днем, точно также запускал...странно... Я тоже эту опцию находил, но работать ее так и не заставил. Там же еще вариант был с -R вместо rpath, но тоже не сработало. Пытаюсь прилинковать libmysqlclient.so. Посмотрю еще раз, может, ошибся где.

Добавлено через 31 секунду
Цитата Сообщение от Evg Посмотреть сообщение
$ LD_DEBUG=all ./a.out
о, пасиб
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
21.12.2011, 09:40
Если на исполняемый файл на травить "readelf --dynamic a.out", то напечатаются динамические тэши. Среди них должно быть RPATH, которое появляется на основании опции -Wl,-rpath или -R (обе опции делают то же самое)
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
21.12.2011, 09:49  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Если на исполняемый файл на травить "readelf --dynamic a.out", то напечатаются динамические тэши. Среди них должно быть RPATH
Ага, делал эту штуку RPATH'а никогда не было....
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
21.12.2011, 09:53
Странно. Ради интереса попробуй абсолютный путь подсунуть. А то может линкер относительные пути зарубает
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
21.12.2011, 12:10  [ТС]
Цитата Сообщение от niXman Посмотреть сообщение
gcc main.c -omain summ.so -Wl,-rpath=./
Черте что, ведь заработала... проверил даже запустив свои вчерашние из списка history и они тоже работают мдя...неужели ребут так благоприятно сказался...
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
21.12.2011, 12:21
вот и славно.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
21.12.2011, 12:26
Добрался наконец до линуксовой машины. Через LD_DEBUG проверил, что относительный путь всё-таки ищется. Правда непонятно, почему у тебя оно заработало только после ребута. Это ненормально
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
21.12.2011, 12:34  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Добрался наконец до линуксовой машины. Через LD_DEBUG проверил, что относительный путь всё-таки ищется. Правда непонятно, почему у тебя оно заработало только после ребута. Это ненормально
Ага, ищется Да, согласен, что ненормально... Я думал, что может дело в том, что запускал с опциями -L. -lmysqlclient, но теперь и такие команды нормально отрабатывают. Какой-то глюк, с чем связан, не знаю. Ладно, тему закрываю, всем спасибо, разобрались
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.12.2011, 12:34
Помогаю со студенческими работами здесь

Как изменить путь к библиотеке, добавленной в References?
Имеется программа на C# с flash содержимым, в ссылки(reference) добавлены dll проигрывателя в VStudio, пытаясь вынуть их из корня программы...

При добавлении Flurry analytics Xcode ругается на путь к библиотеке
Всем привет. Уже второй день пытаюсь добавить в проект Flurry analytics... Но Xcode 7 ругается. ld: library not found for -lFlurry_7.5.1 ...

Как в команде RegSvr32 правильно записать содержащий пробелы путь к регистрируемой библиотеке?
Добрый день! Хочется узнать как правильно прописать путь для регистрации библиотеки которая содержит пробелы. Так же стоит задача запускать...

Картинка в бинарнике...
есть программка в бинарнике...подскажите как в бинарник вшить картинку...и её использовать в программе...смысл чтобы картинка не лежала...

версия, авторские права в бинарнике
Добрый день, мне нужно чтоб в свойствах exeшника появилась вкладка &quot;версия&quot;, где бы были заполнены поля &quot;Описание&quot;,...


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

Или воспользуйтесь поиском по форуму:
31
Закрытая тема Создать тему
Новые блоги и статьи
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных через динамический список в справочнике
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. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru