Under Linux, we can use dlopen() to load a .so file. We will be using that function to load our plugins.
The dlopen() gives you a choice in loading everything in LAZY mode and making all the symbols GLOBAL. We need both flags!
When plugin A calls the function of plugin B, it needs to be defined. However, the loader of all the plugins does not know the order in which the plugins must be loaded and therefore we need the loader to use the lazy flag or loading A before B breaks.
Note that imposes a certain number of constrains and it is important to understand how the system manages the initialization process to avoid problems such as "function not found."