The OpenNET Project / Index page

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




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

    • Отложенная загрузка библиотек., !*! Wazar, 14:54 , 03-Дек-09 (2)
      >man статическая компиляция.

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

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

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

        Да.

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

        Собрать.

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

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

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

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

        • Отложенная загрузка библиотек., !*! Wazar, 12:44 , 04-Дек-09 (5)
          >Собрать.

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

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

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

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

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

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

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

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

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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