В моем приложении у меня есть 3 основных частей:Linking: Статические против динамических
- Exe: исполняемый файл
- Lib_A: библиотека содержит класс синглтон и базовый класс для некоторых расчетов будет использовать в одноточечно класс
- 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.
Дизайн всей системы - очень сложная проблема для меня, поэтому любые комментарии будут оценены.
Большое спасибо.
Ну, я хочу использовать компилятор MSVC++ в компиляторе Windows и Intel C++ в Linux. Я думаю, что оба генерируют лучший оптимизированный код, чем GCC. Приложение предназначено только для моего использования. Я не хочу его продавать. –
@sad_man: И вы планируете получить права на перераспределение для VC и ICC? Удачи с этим. – ephemient
@ephermient: На данный момент я не проверяю свое приложение. Но если я буду продавать его в будущем, то, очевидно, клиент предоставит свою собственную копию компилятора. Я знаю, что это не очень хорошо, но это трюк, чтобы получить скорость скомпилированного двоичного кода. Пока я в порядке с VC и ICC. В худшем случае я могу распространять приложение с GCC? :) –