Hello, On 16.07.2012 02:08, Greg Banks wrote:
So, remind me again what actual value we're getting from this -fvisibility=hidden stuff again?
Initially, libcyrus_sieve had a lot of exported symbols generated by bison and flex. When libcyrus_sieve was loaded by the dynamic linker the list of exported symbols (section .dynsyms) was long, so finding the needed symbol by the dynamic linker was supposed to take long time. Annotating in libcyrus_sieve (and the other libraries) the functions/symbols with EXPORTED, that are needed outside the library, and compiling with -fvisibility=hidden, keeps the list of exported symbols short, so the dynamic linker can load the library faster. On the other side the resulting library is smaller. In addition, I think this makes things easier to maintain, as it is clear, if a function is used outside the library (EXPORTED), only within the library (HIDDEN), or only within the source file, it is defined (static)
Compiling different Automake targets with different CPPFLAGS/CFLAGS creates .o files with very long names, when the non standarf AM_CFLAGS are used. The reason for the long name is, that Automake assumes, that a file can be compiled once with the non-standard (not Makefile.am-wide) CFLAGS, and once with AM_CFLAGS, so Automake reserves its right to create different .o files from the same .c file. this could be avoided, if -fvisibility=hidden is used not only for libraries but also for executables and is put in AM_CFLAGS.
Greetings Dilian
<<attachment: dilyan_palauzov.vcf>>