Shared objects are names liblua5.1.so.0.0.0 and liblua5.2.so.0.0.0, butthis is not enough. You can have a library libfoo.so that is developed
by John and that links the former, and another library, libbar.so,
developed by Jack that links the latter. Now, if I want to use both
libfoo and libbar the loader has to load one fist, say foo, and in turn
this loads liblua5.1 with all its symbols. When it is the turn of bar,
even if liblua5.2 is loaded, some symbols, say lua_pushinteger, are
already there and take precedence. So you end up having bar using some
lua5.1 symbols expecting them to be lua5.2 symbols...