|
|
. У нас есть 2 способа сборки myapp с mylib - со статическим связыванием и с динамическим связыванием. Статическое связывание динамической библиотеки - это звучит немного странно :), но я поясню, что имеется ввиду. Статическое связывание предполагает, что уже на стадии линковки ( терпеть не могу это слово, но у него недостаточно синонимов на русском ) разрешаются все ссылки на внешние функции. Как уже говорилось выше, некоторые компиляторы, в частности, Borland C, MSVC, требуют для этого предварительного создания import library - статической библиотеки со ссылками на функции в соответствующей динамической библиотеке; именно эта import library будет прилинковываться к главному приложению, чтобы обеспечить статическое связывание. При статическом связывании наличие "привязанной" динамической библиотеки необходимо для запуска программы, независимо от того, будете ли вы в текущем сеансе работы использовать функции из нее или нет; без этой библиотеки ваше приложение выдаст соответствующее предупреждение и не запустится. При динамическом связывании ссылки на внешние функции разрешаются во время исполнения, надо только перед использованием этих функций загрузить динамическую библиотеку с помощью функции hb_LibLoad(), ну и не забыть потом ее выгрузить при помощи hb_LibFree(). В этом случае наличие динамической библиотеки потребуется не при запуске программы, а в тот момент, когда будет выполняться hb_LibLoad(), если она вообще будет выполняться. При таком подходе можно сэкономить на времени загрузки программы и на занимаемой ею памяти - подгружая динамические модули только по мере необходимости.
|