It looks like we may be outgrowing the use of export-symbols-regex and friends to control symbol visibility for published shared libraries. On Linux, ld seems to be quite content linking against hidden symbols, but at least on OSX with Clang it seems the visibility is strictly enforced. For instance, librados exports only the prefix "rados_", but that regex hides everything in the C++ interface. Unfortunately, export-symbols-regex doesn't play nice with C++ name mangling. Large projects that I've been looking at for examples (chromium, v8, Java) seem to use a different approach based on the compiler flag "-fvisibility=hidden" that hides everything by default and uses explicit exporting. These are the basics, and there are variants that work on Windows for DLL's as well with more macro magic. #define CEPH_EXPORT __attribute__((__visibility__("default"))) class CEPH_EXPORT ObjectOperation { public: ObjectOperation(); virtual ~ObjectOperation(); ... There is a sample branch up with this approach at: http://github.com/ceph/ceph port/visibility More info https://www.gnu.org/software/gnulib/manual/html_node/Exported-Symbols-of-Shared-Libraries.html http://gcc.gnu.org/wiki/Visibility - Noah -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html