>With Solaris, is there a way to specify the set of symbols that you want >to be visible from the library or are all symbols that need to be >shared between modules within the library visible no matter what?
Yes; this is done through linker mapfiles. For a (not that) typical example see usr/src/lib/libumem/common/mapfile: (This also assigns version numbers which allow the runtime linker to quickly determine whether a program will run with a particular library version) (NODIRECT supresses direct binding and is not relevant here; global: symbols are exported; local: symbols are not; the default is to export all, hence the "local: *;" clause at the end. SUNW_1.1 { global: calloc = NODIRECT; free = NODIRECT; malloc = NODIRECT; memalign = NODIRECT; realloc = NODIRECT; umem_alloc; umem_cache_alloc; umem_cache_create; umem_cache_destroy; umem_cache_free; umem_free; umem_nofail_callback; umem_zalloc; valloc = NODIRECT; }; SUNWprivate_1.1 { global: umem_alloc_align; umem_free_align; umem_reap; vmem_add; vmem_alloc; vmem_contains; vmem_create; vmem_destroy; vmem_free; vmem_heap_arena; vmem_size; vmem_walk; vmem_xalloc; vmem_xfree; local: *; };