While build i am using "-g" to have debug information in build.
there are many object files (>500) due to which resultant shared file (.so) will have huge size.
I can't reduce optimization level.
Is there any way or flag is present by using which i can reduce size of shared file (.so)?
No, but you could put them in a zip -9 and mount that. Disk is cheap, and compression is pretty nice in a CPU much faster than disk (never mind fiber and wire net remote disk). There are many file systems with compression. The fluffy stuff in -g unstripped unoptimized files compresses great. (Sometimes optimizations grow the object, like loop unrolling and subroutine inlining.)
Any stable libraries can be created without debug information.
You can trace a lot of calls using truss without -g or such. The load of being traced can be applied after the app is running. You can truss after an app is started, without source code, recompile or restart.