How C array sizes become part of the binary interface of a library

How C array sizes become part of the binary interface of a library

This means that at run time, the definition of can be contained in the same shared object, a different shared object, or the main program. The key idea implemented in the link editor is that the main program will provide a definition of the variable even if it is actually defined in a shared object at run time. At run time, instead of pointing all shared objects to the original definition of the variable in the shared object containing it, the dynamic loader will instead pick a copy of the variable in the data section of the executable.

Source: developers.redhat.com