2013/12/22 Jed Brown <jed@xxxxxxxx>: > There is a difference for shared libraries if you would like to control > which symbols are exported. With gcc, for example, you might compile > using -fvisibility=hidden. Any functions explicitly declared with > extern, bearing __attribute__((visibility("default")), or using > visibility pragmas will be exported (similar to __declspec(dllexport) on > Windows). Other functions will be internal to the shared library so you > don't have to worry about callers depending on those symbols and > performance can be a bit better by skipping the PLT and avoiding symbol > relocations at load time. See Drepper's guide for more. > > http://www.akkadia.org/drepper/dsohowto.pdf To check this I installed the libgit2-dev package which installed: /usr/include/git2/*.h , /usr/lib/libgit2.so Now, I exported all symbols using: $ readelf -s /usr/lib/libgit2.so and tried to match these with 'externed' prototypes in the Git source directory..no matches. I am confused!!!. Also I checked this: $ ldd git There is no 'gitish' .so in the output; it seems everything is packed inside one executable. So your second point 'skipping the PLT...' also doesn't seem to apply here. Regards, Ravi Shekhar Jethani -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html