Re: Rationale behind 'extern' on protypes in .h files
- From
- Ravi Shekhar Jethani <rsjethani@gmail.com>
- Date
- Dec 23, 2013, 15:24 UTC
- Message-ID
- <CAKTJ_1z-pMePmh4phM2TXSMx0kOjGJ0afQ_JRESggi=k6+y-jA@mail.gmail.com>
- In-Reply-To
- <87eh54spw3.fsf@jedbrown.org>
2013/12/22 Jed Brown <jed@59a2.org>:
Show 11 quoted lines
> 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.pdfTo 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