In the Mozilla codebase, the compiler, at least recent version of gcc, is set to default to hidden symbols, in order to avoid a some problems.
Include the whole rationale here
For this reason any system header included in the build has to be wrapped to make the symbols it defines visible. These so called system headers are listed in <tt>mozilla/config/system-headers</tt>
The main symptom of the problem is if you get a message like this at link time:
/usr/lib/gcc/i586-suse-linux/4.3/../../../../i586-suse-linux/bin/ld: libwidget_gtk2.so: hidden symbol `gtk_tree_view_new' isn't defined
This means that the header that declares <tt>gtk_tree_view_new()</tt>, <tt>gtk/gtktreeview.h</tt> in this case, is not in <tt>mozilla/config/system-headers</tt>.