Связывание: статическое против динамического

В моем приложении у меня есть 3 основные части:

  • Exe: исполняемый файл
  • Lib_A: библиотека содержит одноэлементный класс и базовый класс для некоторых вычислений, которые будут использоваться в синглтоне. class
  • Lib_B: библиотека содержит ряд классов, производных от базы в Lib_A

Причина, по которой у меня есть производные классы в Lib_B, заключается в том, что я хотел бы скомпилировать Lib_B во время выполнения из Exe. Мне нужно генерировать производные классы во время вычислений, не завершая работу всей системы. Для меня это слишком важно. Это означает, что изначально я мог сказать, что Lib_B1 загружается динамически, а также могу скомпилировать другие версии Lib_B как Lib_B2, Lib_B3, Lib_B4 и т. Д. И загрузить их динамически. Все библиотеки Lib_Bx будут иметь функции точки входа для экспорта в них классов.

Итак, принимая во внимание следующие факты:

  • Во время выполнения будет различное количество файлов, совместно использующих одну и ту же Lib_A.
  • Приложение должно работать в Windows и Linux. Таким образом, частичная кроссплатформенность является проблемой.
  • Я собираюсь использовать некоторые библиотеки, такие как TBB, Boost, Qt, которые могут иметь свои собственные библиотеки, такие как tbb.dll и т. Д.

Каковы плюсы и минусы статической или динамической компоновки Lib_A с Exe и Lib_Bx? Как это может повлиять на производительность, размер системы и т. Д.? Могу ли я столкнуться с какими-либо опасными или трудными ситуациями, помимо каждой ОС, мне нужно использовать один и тот же компилятор для Exe, Lib_A и Lib_Bx.

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

Большое спасибо.

7
задан ali_bahoo 26 January 2011 в 13:40
поделиться