Я бы дал общее практическое правило: если у вас большая кодовая база, все построено поверх библиотек более низкого уровня (например, Utils или Gui Framework), которые вы хотите разделить на более управляемые библиотеки, то сделайте их статичными библиотеки. Динамические библиотеки на самом деле ничего не покупают, и сюрпризов меньше - например, будет только один экземпляр синглетонов.
Если у вас есть библиотека, которая полностью отделена от остальной базы кода (например, сторонней библиотеки), тогда подумайте о том, чтобы сделать ее dll. Если библиотека LGPL, вам может понадобиться использовать DLL в любом случае из-за условий лицензирования.