2 hours ago, Shaarigan said:
The only usecase I see today for dynamic libraries is either loading them on demand like when using C# p/invoke or hiding your source code if your name is FMOD
You are not entirely correct.
There are major reasons why you would want to use dynamic libraries - example being support for various formats (i.e. plugin based architecture).
Example
2D images with plugin architecture - you create a common function call to load the image and return you width, height and rgb data. Now implement TGA.dll, BMP.dll, PNG.dll, etc. etc. etc. Place them all into plugin/texture folder.
Now your main application does dlopen for each dll in that directory, uses dlsym to get pointer to load function - and based on format it calls appropriate of these functions.
At this point adding a new format support is possible (and even 3rd parties can add it).
...
The advantage of dynamic libraries (in plugin-like architecture F.e.) is that all you need is to add another dynamic library. No need to link whole project again. Similar advantages are when you have multiple projects using same functionality (game, editors, viewer, etc.). Using a common dynamic library actually reduces space - as for versioning, for both scenarios (static libs linked into binaries, or dll modules with binaries) if you are responsible, you will have it correct.
For the original question - it also depends on the scale and purpose of the project. For small projects and games (you probably won't re-use modules) it most likely doesn't pay off having multiple dynamic libraries, single binary is easier to maintain, setup, etc.