The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Отложенная загрузка библиотек."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Отложенная загрузка библиотек."  +/
Сообщение от Wazar email on 02-Дек-09, 20:42 
Собственно, суть проблемы. Имеется скомпилированное CGI-приложение. Оно должно работать на каком то хостинге и при этом быть независимым от библиотек установленных на хостинге. То есть библиотеки должны загружаться не из /lib/ /usr/lib/ итп, а из установленного в файле настроек каталога. При этом LD_LIBRARY_PATH изменить возможности нет. Собственно есть вариант загружать библиотеку вручную с помощью системных вызовов, после чего получить указатели на нужные функции.
А нельзя ли прилинковать библиотеки на этапе компиляции, но при запуске приложения не загружать библиотеки а загрузить их вручную из кода. И чтобы проверка на наличие библиотек не выполнялась и сообщение вида "...error while loading shared libraries..." не выдавалась. Но при этом не искать указатели на нужные функции, а объявить их в коде просто как extern.
Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Отложенная загрузка библиотек."  +/
Сообщение от аноним on 02-Дек-09, 22:14 
man статическая компиляция.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Отложенная загрузка библиотек."  +/
Сообщение от Wazar on 03-Дек-09, 14:54 
>man статическая компиляция.

В смысле использовать статические библиотеки (.a)?
А если нет нужной?

Переформулируя вопрос: как в gcc сделать так что бы библиотека .so прилинковалась, но при этом не загружалась при запуске исполняемого файла автоматически. А после загрузки библиотеки из кода к функциям можно было бы обращаться?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Отложенная загрузка библиотек."  +/
Сообщение от Аноним (??) on 04-Дек-09, 04:47 
>В смысле использовать статические библиотеки (.a)?

Да.

>А если нет нужной?

Собрать.

>Переформулируя вопрос: как в gcc сделать так что бы библиотека .so прилинковалась
>но при этом не загружалась при запуске исполняемого файла автоматически

Никак. Динамические библиотеки по определению для этого не предназначены.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Отложенная загрузка библиотек."  +/
Сообщение от ze6ra (ok) on 04-Дек-09, 10:07 
>[оверквотинг удален]
>Да.
>
>>А если нет нужной?
>
>Собрать.
>
>>Переформулируя вопрос: как в gcc сделать так что бы библиотека .so прилинковалась
>>но при этом не загружалась при запуске исполняемого файла автоматически
>
>Никак. Динамические библиотеки по определению для этого не предназначены.

Поидее писать свой загрузчик динамических библиотек который будет выполнять ваши требования. В ELF вроде есть такая возможность. Так что при наличии времени и желания можно. Хотя может можно как-то и стандартный настроить на такое поведение.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Отложенная загрузка библиотек."  +/
Сообщение от Wazar (ok) on 04-Дек-09, 12:44 
>Собрать.

А если не имеется исходников? Вот, например, оракловый libociicus. Имеется so библиотека и заголовочные файлы. По этому собрать нельзя. Нет ли инструментов для конвертации динамических либ в статические?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Отложенная загрузка библиотек."  +/
Сообщение от Вова on 04-Дек-09, 14:43 
>>Собрать.
>
>А если не имеется исходников? Вот, например, оракловый libociicus. Имеется so библиотека
>и заголовочные файлы. Поэтому собрать нельзя.

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Отложенная загрузка библиотек."  +/
Сообщение от DeadMustdie email(??) on 05-Дек-09, 20:08 
>В этом случае можно под этот заголовочный файл скомпилировать свою стабовую библиотеку,
>которая по вызову функций, объявленных в заголовочном файле будет вызывать подгруженные
>уже во время работы приложения библиотеки.

Вариант реальный, но весьма трудоёмкий.
Вообще исходная проблема лично мне кажется несколько надуманной.
Если на хостинге есть возможность водрузить громоздкое проприетарное приложение
(тот же Oracle, хотя бы в виде Instant Client) со всеми необходимыми настройками,
то и библиотеки нужные поставить - тоже можно.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Отложенная загрузка библиотек."  +/
Сообщение от Wazar (ok) on 06-Дек-09, 13:35 
>>В этом случае можно под этот заголовочный файл скомпилировать свою стабовую библиотеку,
>>которая по вызову функций, объявленных в заголовочном файле будет вызывать подгруженные
>>уже во время работы приложения библиотеки.
>
>Вариант реальный, но весьма трудоёмкий.
>Вообще исходная проблема лично мне кажется несколько надуманной.
>Если на хостинге есть возможность водрузить громоздкое проприетарное приложение
>(тот же Oracle, хотя бы в виде Instant Client) со всеми необходимыми
>настройками,
>то и библиотеки нужные поставить - тоже можно.

Нет. Речь идет о недорогих хостингах. Просто я занимаюсь написанием фреймворка для создания сайтов на D. И имеются две версии. Первая - в виде демона, пока тестирую но в целом работает. Ей веб-сервер не нужен, и она предназначена для работы либо на собственном сервере, или хотя бы VDS. Вторая - CGI - для тех хостингов где демона запустить нельзя. Эта версия проще и уже работает, одна проблема - непонятно как быть с либами.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Отложенная загрузка библиотек."  +/
Сообщение от f00l (ok) on 07-Дек-09, 09:10 
>>man статическая компиляция.
>
>В смысле использовать статические библиотеки (.a)?
>А если нет нужной?
>
>Переформулируя вопрос: как в gcc сделать так что бы библиотека .so прилинковалась,
>но при этом не загружалась при запуске исполняемого файла автоматически. А
>после загрузки библиотеки из кода к функциям можно было бы обращаться?
>

Используй набор функций dlopen(), dlsym() для динамической загрузки библиотеки и использования внутри программы , также при компиляции можно использовать опцию
-Wl,rpath,/local/lib указываешь путь и там программа будет искать библиотеку.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру