Use hidden visibility for symbols on GCC only, not clang.  Other small tweaks.