LINUX.ORG.RU

Загрузить библиотеку

 


1

2

Собственно сабж. Возможно ли загрузить в память некоторые библиотеки без запуска приложений, которые их вызывают? (загружать например скриптом, который вызывается при старте).
//preload не предлагать.

★★★★

не совсем понятно, что сеньёру желается, на ум приходят два тупых варианта:

  • вариант один: прилинкить все библиотеки к systemd ☺
  • вариант два: cat /var/lib/* > /dev/null что бы они в кеш попали
beastie ★★★★★ ()
Ответ на: комментарий от beastie

прилинкить все библиотеки к systemd

может хватит уже нести ахинею?

megabaks ★★★★ ()
Ответ на: комментарий от beastie

не совсем понятно, что сеньёру желается

Если 1 раз запустить приложение, библиотеки загрузятся в ram и будут там сидеть пока не надоест пока места станет мало. Как можно их загрузить в рам до загрузки приложение?
Вариант с cat какой-то костыльный.

ymuv ★★★★ ()
Ответ на: комментарий от megabaks

ты только за этим сюда пришёл, что бы это сказать? для тебя у меня полохие новости.

ждём дальше развёрнутого ответа ТС, на предмет, что же ему конкретно хочеться.

beastie ★★★★★ ()
Ответ на: комментарий от ymuv

да, но от куда ты занешь, какие библиотеки понадобятся? редкоиспользуемые тащить в ram смысла нет, а частоиспользуемые и так уже там. да и выгоднее imho просто запустить приложение, чем сначала грузить библиотеки, половина которых и так не потребуется, а потом ещё и приложение запускать.

beastie ★★★★★ ()
Ответ на: комментарий от beastie

да, но от куда ты занешь, какие библиотеки понадобятся?

Допустим я знаю что мне после загрузки системы нужны lib1.so lib2.so . Как их подгрузить?

ymuv ★★★★ ()
Ответ на: комментарий от ymuv

Написать программку, которая ничего не делает, висит и держит требуемые библиотеки.
Плохо, конечно, что её придётся перекомпилировать под каждый набор so-шек, которые ты захочешь «предзагрузить».

ABW ★★★★ ()
Ответ на: комментарий от ymuv

зачем? они ведь сами подгрузятся, когда понадобятся. я о том, что грузится они будут так или иначе. а при буте ли, или позже какая разница? остаётся только preload, но ты от него сам отказался.

beastie ★★★★★ ()
Ответ на: комментарий от ABW

Написать программку, которая ничего не делает, висит и держит требуемые библиотеки.

Так можно?
#include <dlfcn.h>
..
void* h1 = dlopen(«lib1.so»,RTLD_LAZY);
void* h2 = dlopen(«lib2.so»,RTLD_LAZY);

Плохо, конечно, что её придётся перекомпилировать под каждый набор so-шек, которые ты захочешь «предзагрузить».

А разве не можно в файле задать список библиотек а в коде пройтись по файлу?

ymuv ★★★★ ()
Последнее исправление: ymuv (всего исправлений: 1)
Ответ на: комментарий от ymuv

Ну наверное, так даже лучше, чем я представлял.
Тогда ты сможешь написать демона, реализующего некоторый аналог функциональности insmod/rmmod.
Кстати, подобные желания появляются, видимо, чаще, чем некоторым кажется.

ABW ★★★★ ()
Ответ на: комментарий от ABW

Еще вопрос. Допустим lib1.so тянет lib11.so, а lib11 тянет lib12.so.
Вопрос: если подгрузить lib1.so, остальные тоже загрузятся?

ymuv ★★★★ ()
Ответ на: комментарий от ymuv

Да, об этом прямо говорится в dlopen(3).
Там же утверждается, насколько я понял, что LD_LIBRARY_PATH и /etc/ld.so.cache обрабатываются как положено.

ABW ★★★★ ()

Может, просто помещать каталоги /lib, /lib64, /usr/lib, /usr/lib64 в память?

Kindly_Cat ()

preload не предлагать? ок, тогда readahead

Pinkbyte ★★★★★ ()
Ответ на: комментарий от ABW

Да, об этом прямо говорится в dlopen(3).

При флаге RTLD_LAZY зависимости не проверяются.

andreyu ★★★★★ ()
LD_LIBRARY_PRELOAD=/path/to/library.so tail -f -s 100500 /dev/null
Deleted ()

try: /dev/shm, linux RAM disk

возможно, gdb умеет подгружать

swwwfactory ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.