Help with initialisation

Hi, I would appreciate some expert help understanding SDL initialisation.
The functions I’m interested in are SDL_Init, SDL_InitSubsystem, SDL_Quit, SDL_Quitsubsystem, SDL_Wasinit, SDL_SetMainReady.

The context: I am creating bindings for my language (Felix) which is a C++ code generator so the binding code is C++. The system is a framework, so it is NOT permissible for the SDL system to replace main().

The system does both static and dynamic linkage, applications in the dynamic link scenario are DLLs (shared libs). On OSX and Linux, SDL_main hackery is not required. It works as a library, and seems to on Windows as well. Android and iOS however probably require hackery.

I need to know if SDL has already been initialised: by this I mean the “core” SDL system, or if it is safe to call SDL_init twice. Is it safe to call after SDL_quit.

[Lack of reentrancy is a curse. My system is 100% reentrant except where it has to bind to non-reentrant libraries and faulty OS features like unix signals]