diff --git a/project/extras.mk b/project/extras.mk
index 7beba34..da2faaf 100644
--- a/project/extras.mk
+++ b/project/extras.mk
@@ -4,6 +4,7 @@ CFLAGS_APP_ATTR		+= -DSLBT_APP
 
 CFLAGS_MACHINE		:= -DSLBT_MACHINE=\"$(CC_HOST)\"
 CFLAGS_CONFIG		+= $(CFLAGS_MACHINE)
+CFLAGS_CONFIG		+= $(CFLAGS_ATTR_VISIBILITY_HIDDEN)
 
 src/driver/slbt_driver_ctx.o:	version.tag
 src/driver/slbt_driver_ctx.lo:	version.tag
diff --git a/project/headers.mk b/project/headers.mk
index bb2628f..4a732de 100644
--- a/project/headers.mk
+++ b/project/headers.mk
@@ -22,5 +22,6 @@ INTERNAL_HEADERS = \
 	$(PROJECT_DIR)/src/internal/$(PACKAGE)_spawn_impl.h \
 	$(PROJECT_DIR)/src/internal/$(PACKAGE)_symlink_impl.h \
 	$(PROJECT_DIR)/src/internal/$(PACKAGE)_uninstall_impl.h \
+	$(PROJECT_DIR)/src/internal/$(PACKAGE)_visibility_impl.h \
 
 ALL_HEADERS = $(API_HEADERS) $(INTERNAL_HEADERS)
diff --git a/src/arbits/slbt_archive_mapstrv.c b/src/arbits/slbt_archive_mapstrv.c
index eadf809..f57765a 100644
--- a/src/arbits/slbt_archive_mapstrv.c
+++ b/src/arbits/slbt_archive_mapstrv.c
@@ -9,6 +9,7 @@
 #include <slibtool/slibtool.h>
 #include "slibtool_driver_impl.h"
 #include "slibtool_errinfo_impl.h"
+#include "slibtool_visibility_impl.h"
 #include "slibtool_ar_impl.h"
 
 static int slbt_strcmp(const void * a, const void * b)
@@ -16,7 +17,7 @@ static int slbt_strcmp(const void * a, const void * b)
 	return strcmp(*(const char **)a,*(const char **)b);
 }
 
-int slbt_update_mapstrv(
+slbt_hidden int slbt_update_mapstrv(
 	const struct slbt_driver_ctx *  dctx,
 	struct slbt_archive_meta_impl * mctx)
 {
diff --git a/src/arbits/slbt_archive_meta.c b/src/arbits/slbt_archive_meta.c
index f4ae050..f3dd39e 100644
--- a/src/arbits/slbt_archive_meta.c
+++ b/src/arbits/slbt_archive_meta.c
@@ -15,6 +15,7 @@
 #include "slibtool_ar_impl.h"
 #include "slibtool_driver_impl.h"
 #include "slibtool_errinfo_impl.h"
+#include "slibtool_visibility_impl.h"
 
 /* transient header info vector */
 struct ar_header_info {
@@ -279,7 +280,7 @@ static int slbt_ar_parse_primary_armap(
 	return SLBT_CUSTOM_ERROR(dctx,SLBT_ERR_FLOW_ERROR);
 }
 
-struct ar_meta_member_info * slbt_archive_member_from_offset(
+slbt_hidden struct ar_meta_member_info * slbt_archive_member_from_offset(
 	struct slbt_archive_meta_impl * meta,
 	off_t                           offset)
 {
diff --git a/src/arbits/slbt_armap_bsd_32.c b/src/arbits/slbt_armap_bsd_32.c
index f41c500..45467f3 100644
--- a/src/arbits/slbt_armap_bsd_32.c
+++ b/src/arbits/slbt_armap_bsd_32.c
@@ -14,8 +14,9 @@
 #include "slibtool_ar_impl.h"
 #include "slibtool_driver_impl.h"
 #include "slibtool_errinfo_impl.h"
+#include "slibtool_visibility_impl.h"
 
-int slbt_ar_parse_primary_armap_bsd_32(
+slbt_hidden int slbt_ar_parse_primary_armap_bsd_32(
 	const struct slbt_driver_ctx *  dctx,
 	struct slbt_archive_meta_impl * m)
 
diff --git a/src/arbits/slbt_armap_bsd_64.c b/src/arbits/slbt_armap_bsd_64.c
index 6dcc737..5a9a4dc 100644
--- a/src/arbits/slbt_armap_bsd_64.c
+++ b/src/arbits/slbt_armap_bsd_64.c
@@ -14,8 +14,9 @@
 #include "slibtool_ar_impl.h"
 #include "slibtool_driver_impl.h"
 #include "slibtool_errinfo_impl.h"
+#include "slibtool_visibility_impl.h"
 
-int slbt_ar_parse_primary_armap_bsd_64(
+slbt_hidden int slbt_ar_parse_primary_armap_bsd_64(
 	const struct slbt_driver_ctx *  dctx,
 	struct slbt_archive_meta_impl * m)
 {
diff --git a/src/arbits/slbt_armap_sysv_32.c b/src/arbits/slbt_armap_sysv_32.c
index 12840ef..09d88b5 100644
--- a/src/arbits/slbt_armap_sysv_32.c
+++ b/src/arbits/slbt_armap_sysv_32.c
@@ -14,8 +14,9 @@
 #include "slibtool_ar_impl.h"
 #include "slibtool_driver_impl.h"
 #include "slibtool_errinfo_impl.h"
+#include "slibtool_visibility_impl.h"
 
-int slbt_ar_parse_primary_armap_sysv_32(
+slbt_hidden int slbt_ar_parse_primary_armap_sysv_32(
 	const struct slbt_driver_ctx *  dctx,
 	struct slbt_archive_meta_impl * m)
 {
diff --git a/src/arbits/slbt_armap_sysv_64.c b/src/arbits/slbt_armap_sysv_64.c
index 3149ee2..1af588a 100644
--- a/src/arbits/slbt_armap_sysv_64.c
+++ b/src/arbits/slbt_armap_sysv_64.c
@@ -14,8 +14,9 @@
 #include "slibtool_ar_impl.h"
 #include "slibtool_driver_impl.h"
 #include "slibtool_errinfo_impl.h"
+#include "slibtool_visibility_impl.h"
 
-int slbt_ar_parse_primary_armap_sysv_64(
+slbt_hidden int slbt_ar_parse_primary_armap_sysv_64(
 	const struct slbt_driver_ctx *  dctx,
 	struct slbt_archive_meta_impl * m)
 {
diff --git a/src/driver/slbt_driver_ctx.c b/src/driver/slbt_driver_ctx.c
index 11d4e4d..d2589b7 100644
--- a/src/driver/slbt_driver_ctx.c
+++ b/src/driver/slbt_driver_ctx.c
@@ -92,13 +92,13 @@ static void slbt_output_raw_vector(int fderr, char ** argv, char ** envp, bool f
 	slbt_dprintf(fderr,"%s\n\n",fcolor ? aclr_reset : "");
 }
 
-const char * slbt_program_name(const char * path)
+slbt_hidden const char * slbt_program_name(const char * path)
 {
 	return argv_program_name(path);
 }
 
 
-int slbt_optv_init(
+slbt_hidden int slbt_optv_init(
 	const struct argv_option    options[],
 	const struct argv_option ** optv)
 {
@@ -106,7 +106,7 @@ int slbt_optv_init(
 }
 
 
-void slbt_argv_scan(
+slbt_hidden void slbt_argv_scan(
 	char **				argv,
 	const struct argv_option **	optv,
 	struct argv_ctx *		ctx,
@@ -116,7 +116,7 @@ void slbt_argv_scan(
 }
 
 
-struct argv_meta * slbt_argv_get(
+slbt_hidden struct argv_meta * slbt_argv_get(
 	char **                         argv,
 	const struct argv_option **     optv,
 	int                             flags,
@@ -126,13 +126,13 @@ struct argv_meta * slbt_argv_get(
 }
 
 
-void slbt_argv_free(struct argv_meta * meta)
+slbt_hidden void slbt_argv_free(struct argv_meta * meta)
 {
 	return argv_free(meta);
 }
 
 
-void slbt_argv_usage(
+slbt_hidden void slbt_argv_usage(
 	int		                fd,
 	const char *	                header,
 	const struct	argv_option **  optv,
@@ -142,7 +142,7 @@ void slbt_argv_usage(
 }
 
 
-void slbt_argv_usage_plain(
+slbt_hidden void slbt_argv_usage_plain(
 	int		                fd,
 	const char *	                header,
 	const struct	argv_option **  optv,
@@ -152,7 +152,7 @@ void slbt_argv_usage_plain(
 }
 
 
-uint64_t slbt_argv_flags(uint64_t flags)
+slbt_hidden uint64_t slbt_argv_flags(uint64_t flags)
 {
 	uint32_t ret = 0;
 
@@ -195,7 +195,7 @@ static int slbt_free_argv_buffer(
 	return -1;
 }
 
-int slbt_driver_usage(
+slbt_hidden int slbt_driver_usage(
 	int				fdout,
 	const char *			program,
 	const char *			arg,
diff --git a/src/driver/slbt_host_params.c b/src/driver/slbt_host_params.c
index 9fe8153..d708028 100644
--- a/src/driver/slbt_host_params.c
+++ b/src/driver/slbt_host_params.c
@@ -16,6 +16,7 @@
 #include <slibtool/slibtool.h>
 #include "slibtool_driver_impl.h"
 #include "slibtool_errinfo_impl.h"
+#include "slibtool_visibility_impl.h"
 #include "slibtool_ar_impl.h"
 
 
@@ -130,7 +131,7 @@ static void slbt_spawn_ar(char ** argv, int * ecode)
 }
 
 
-int slbt_init_host_params(
+slbt_hidden int slbt_init_host_params(
 	const struct slbt_driver_ctx *	dctx,
 	const struct slbt_common_ctx *	cctx,
 	struct slbt_host_strs *		drvhost,
@@ -498,7 +499,7 @@ static void slbt_free_host_tool_argv(char ** argv)
 	free(argv);
 }
 
-void slbt_free_host_params(struct slbt_host_strs * host)
+slbt_hidden void slbt_free_host_params(struct slbt_host_strs * host)
 {
 	if (host->machine)
 		free(host->machine);
@@ -538,7 +539,7 @@ void slbt_free_host_params(struct slbt_host_strs * host)
 }
 
 
-void slbt_init_flavor_settings(
+slbt_hidden void slbt_init_flavor_settings(
 	struct slbt_common_ctx *	cctx,
 	const struct slbt_host_params * ahost,
 	struct slbt_flavor_settings *	psettings)
@@ -575,7 +576,7 @@ void slbt_init_flavor_settings(
 }
 
 
-int slbt_init_ldrpath(
+slbt_hidden int slbt_init_ldrpath(
 	struct slbt_common_ctx *  cctx,
 	struct slbt_host_params * host)
 {
diff --git a/src/driver/slbt_link_params.c b/src/driver/slbt_link_params.c
index 080abbe..c12f513 100644
--- a/src/driver/slbt_link_params.c
+++ b/src/driver/slbt_link_params.c
@@ -14,9 +14,10 @@
 #include "slibtool_version.h"
 #include "slibtool_driver_impl.h"
 #include "slibtool_errinfo_impl.h"
+#include "slibtool_visibility_impl.h"
 
 
-int slbt_init_link_params(struct slbt_driver_ctx_impl * ctx)
+slbt_hidden int slbt_init_link_params(struct slbt_driver_ctx_impl * ctx)
 {
 	const char * program;
 	const char * libname;
diff --git a/src/driver/slbt_split_argv.c b/src/driver/slbt_split_argv.c
index 601c1ad..db4693a 100644
--- a/src/driver/slbt_split_argv.c
+++ b/src/driver/slbt_split_argv.c
@@ -15,12 +15,13 @@
 #include "slibtool_driver_impl.h"
 #include "slibtool_objlist_impl.h"
 #include "slibtool_errinfo_impl.h"
+#include "slibtool_visibility_impl.h"
 #include "slibtool_ar_impl.h"
 #include "argv/argv.h"
 
 static char * slbt_default_cargv[] = {"cc",0};
 
-int slbt_split_argv(
+slbt_hidden int slbt_split_argv(
 	char **				argv,
 	uint64_t			flags,
 	struct slbt_split_vector *	sargv,
diff --git a/src/driver/slbt_version_info.c b/src/driver/slbt_version_info.c
index e6ce735..bb4a36e 100644
--- a/src/driver/slbt_version_info.c
+++ b/src/driver/slbt_version_info.c
@@ -14,10 +14,11 @@
 #include "slibtool_version.h"
 #include "slibtool_driver_impl.h"
 #include "slibtool_errinfo_impl.h"
+#include "slibtool_visibility_impl.h"
 #include "argv/argv.h"
 
 
-int slbt_init_version_info(
+slbt_hidden int slbt_init_version_info(
 	struct slbt_driver_ctx_impl *	ictx,
 	struct slbt_version_info *	verinfo)
 {
diff --git a/src/internal/slibtool_dprintf_impl.c b/src/internal/slibtool_dprintf_impl.c
index bc84ca9..ad90a0d 100644
--- a/src/internal/slibtool_dprintf_impl.c
+++ b/src/internal/slibtool_dprintf_impl.c
@@ -11,8 +11,9 @@
 #include <errno.h>
 
 #include "slibtool_dprintf_impl.h"
+#include "slibtool_visibility_impl.h"
 
-int slbt_dprintf(int fd, const char * fmt, ...)
+slbt_hidden int slbt_dprintf(int fd, const char * fmt, ...)
 {
 	int	ret;
 	int	cnt;
diff --git a/src/internal/slibtool_driver_impl.h b/src/internal/slibtool_driver_impl.h
index 2fecb92..e4c0977 100644
--- a/src/internal/slibtool_driver_impl.h
+++ b/src/internal/slibtool_driver_impl.h
@@ -15,6 +15,7 @@
 #include <slibtool/slibtool.h>
 #include "slibtool_dprintf_impl.h"
 #include "slibtool_mapfile_impl.h"
+#include "slibtool_visibility_impl.h"
 #include "argv/argv.h"
 
 #define SLBT_OPTV_ELEMENTS 128
diff --git a/src/internal/slibtool_errinfo_impl.c b/src/internal/slibtool_errinfo_impl.c
index 02ebfc4..3b95b46 100644
--- a/src/internal/slibtool_errinfo_impl.c
+++ b/src/internal/slibtool_errinfo_impl.c
@@ -7,8 +7,9 @@
 #include <slibtool/slibtool.h>
 #include "slibtool_driver_impl.h"
 #include "slibtool_errinfo_impl.h"
+#include "slibtool_visibility_impl.h"
 
-int slbt_record_error(
+slbt_hidden int slbt_record_error(
 	const struct slbt_driver_ctx *	dctx,
 	int				esyscode,
 	int				elibcode,
diff --git a/src/internal/slibtool_lconf_impl.c b/src/internal/slibtool_lconf_impl.c
index c7d2fd3..32f192d 100644
--- a/src/internal/slibtool_lconf_impl.c
+++ b/src/internal/slibtool_lconf_impl.c
@@ -18,6 +18,7 @@
 #include "slibtool_errinfo_impl.h"
 #include "slibtool_symlink_impl.h"
 #include "slibtool_readlink_impl.h"
+#include "slibtool_visibility_impl.h"
 
 enum slbt_lconf_opt {
 	SLBT_LCONF_OPT_UNKNOWN,
@@ -708,7 +709,7 @@ static int slbt_get_lconf_var(
 	return 0;
 }
 
-int slbt_get_lconf_flags(
+slbt_hidden int slbt_get_lconf_flags(
 	struct slbt_driver_ctx *	dctx,
 	const char *			lconf,
 	uint64_t *			flags)
diff --git a/src/internal/slibtool_libmeta_impl.c b/src/internal/slibtool_libmeta_impl.c
index c3f4109..db2753b 100644
--- a/src/internal/slibtool_libmeta_impl.c
+++ b/src/internal/slibtool_libmeta_impl.c
@@ -13,6 +13,7 @@
 #include "slibtool_dprintf_impl.h"
 #include "slibtool_errinfo_impl.h"
 #include "slibtool_metafile_impl.h"
+#include "slibtool_visibility_impl.h"
 
 static int  slbt_create_default_library_wrapper(
 	const struct slbt_driver_ctx *	dctx,
@@ -266,7 +267,7 @@ static int  slbt_create_compatible_library_wrapper(
 	return (ret < 0) ? SLBT_SYSTEM_ERROR(dctx,0) : 0;
 }
 
-int  slbt_create_library_wrapper(
+slbt_hidden int slbt_create_library_wrapper(
 	const struct slbt_driver_ctx *	dctx,
 	struct slbt_exec_ctx *		ectx,
 	char *				arname,
diff --git a/src/internal/slibtool_mapfile_impl.c b/src/internal/slibtool_mapfile_impl.c
index b6c749d..3440484 100644
--- a/src/internal/slibtool_mapfile_impl.c
+++ b/src/internal/slibtool_mapfile_impl.c
@@ -15,6 +15,7 @@
 
 #include "slibtool_errinfo_impl.h"
 #include "slibtool_mapfile_impl.h"
+#include "slibtool_visibility_impl.h"
 
 static void slbt_munmap(void * addr, size_t size)
 {
@@ -23,7 +24,7 @@ static void slbt_munmap(void * addr, size_t size)
 	}
 }
 
-struct slbt_map_info * slbt_map_file(
+slbt_hidden struct slbt_map_info * slbt_map_file(
 	int		fdat,
 	const char *	path,
 	uint32_t	flags)
@@ -82,13 +83,13 @@ struct slbt_map_info * slbt_map_file(
 	return mapinfo;
 }
 
-void slbt_unmap_file(struct slbt_map_info * mapinfo)
+slbt_hidden void slbt_unmap_file(struct slbt_map_info * mapinfo)
 {
 	slbt_munmap(mapinfo->addr,mapinfo->size);
 	free(mapinfo);
 }
 
-int  slbt_mapped_readline(
+slbt_hidden int slbt_mapped_readline(
 	const struct slbt_driver_ctx *	dctx,
 	struct slbt_map_info *		mapinfo,
 	char *				buf,
diff --git a/src/internal/slibtool_objlist_impl.c b/src/internal/slibtool_objlist_impl.c
index 91bf94f..a7176cd 100644
--- a/src/internal/slibtool_objlist_impl.c
+++ b/src/internal/slibtool_objlist_impl.c
@@ -17,8 +17,9 @@
 #include "slibtool_errinfo_impl.h"
 #include "slibtool_mapfile_impl.h"
 #include "slibtool_objlist_impl.h"
+#include "slibtool_visibility_impl.h"
 
-int slbt_objlist_read(
+slbt_hidden int slbt_objlist_read(
 	int                     fdcwd,
 	struct slbt_obj_list *  objlist)
 {
diff --git a/src/internal/slibtool_objmeta_impl.c b/src/internal/slibtool_objmeta_impl.c
index 06a11a6..1694e1d 100644
--- a/src/internal/slibtool_objmeta_impl.c
+++ b/src/internal/slibtool_objmeta_impl.c
@@ -11,6 +11,7 @@
 #include "slibtool_dprintf_impl.h"
 #include "slibtool_errinfo_impl.h"
 #include "slibtool_metafile_impl.h"
+#include "slibtool_visibility_impl.h"
 
 static int  slbt_create_default_object_wrapper(
 	const struct slbt_driver_ctx *	dctx,
@@ -101,7 +102,7 @@ static int  slbt_create_compatible_object_wrapper(
 	return (ret < 0) ? SLBT_SYSTEM_ERROR(dctx,0) : 0;
 }
 
-int  slbt_create_object_wrapper(
+slbt_hidden int slbt_create_object_wrapper(
 	const struct slbt_driver_ctx *	dctx,
 	struct slbt_exec_ctx *		ectx)
 {
diff --git a/src/internal/slibtool_snprintf_impl.c b/src/internal/slibtool_snprintf_impl.c
index 3b9f266..a60fb60 100644
--- a/src/internal/slibtool_snprintf_impl.c
+++ b/src/internal/slibtool_snprintf_impl.c
@@ -11,6 +11,7 @@
 #include <errno.h>
 
 #include "slibtool_snprintf_impl.h"
+#include "slibtool_visibility_impl.h"
 
 
 /*****************************************************************/
@@ -23,7 +24,7 @@
 /**********************************************************/
 
 
-int slbt_snprintf(char * buf, size_t buflen, const char * fmt, ...)
+slbt_hidden int slbt_snprintf(char * buf, size_t buflen, const char * fmt, ...)
 {
 	va_list	ap;
 	size_t  nbytes;
diff --git a/src/internal/slibtool_symlink_impl.c b/src/internal/slibtool_symlink_impl.c
index 174cb48..21d4972 100644
--- a/src/internal/slibtool_symlink_impl.c
+++ b/src/internal/slibtool_symlink_impl.c
@@ -14,12 +14,13 @@
 #include "slibtool_symlink_impl.h"
 #include "slibtool_readlink_impl.h"
 #include "slibtool_snprintf_impl.h"
+#include "slibtool_visibility_impl.h"
 
 #define SLBT_DEV_NULL_FLAGS	(SLBT_DRIVER_ALL_STATIC      \
 				| SLBT_DRIVER_DISABLE_SHARED \
 				| SLBT_DRIVER_DISABLE_STATIC)
 
-int slbt_create_symlink(
+slbt_hidden int slbt_create_symlink(
 	const struct slbt_driver_ctx *	dctx,
 	struct slbt_exec_ctx *		ectx,
 	const char *			target,
@@ -130,7 +131,7 @@ int slbt_create_symlink(
 		: 0;
 }
 
-int slbt_symlink_is_a_placeholder(int fdcwd, char * lnkpath)
+slbt_hidden int slbt_symlink_is_a_placeholder(int fdcwd, char * lnkpath)
 {
 	size_t		len;
 	char		slink [PATH_MAX];
diff --git a/src/internal/slibtool_visibility_impl.h b/src/internal/slibtool_visibility_impl.h
new file mode 100644
index 0000000..7b1e50f
--- /dev/null
+++ b/src/internal/slibtool_visibility_impl.h
@@ -0,0 +1,10 @@
+#ifndef SLIBTOOL_VISIBILITY_IMPL_H
+#define SLIBTOOL_VISIBILITY_IMPL_H
+
+#ifdef _ATTR_VISIBILITY_HIDDEN
+#define slbt_hidden _ATTR_VISIBILITY_HIDDEN
+#else
+#define slbt_hidden
+#endif
+
+#endif
diff --git a/src/logic/linkcmd/slbt_linkcmd_archive.c b/src/logic/linkcmd/slbt_linkcmd_archive.c
index 5826fd7..e3ac657 100644
--- a/src/logic/linkcmd/slbt_linkcmd_archive.c
+++ b/src/logic/linkcmd/slbt_linkcmd_archive.c
@@ -20,6 +20,7 @@
 #include "slibtool_snprintf_impl.h"
 #include "slibtool_symlink_impl.h"
 #include "slibtool_spawn_impl.h"
+#include "slibtool_visibility_impl.h"
 
 static int slbt_exec_link_create_noop_symlink(
 	const struct slbt_driver_ctx *	dctx,
@@ -69,7 +70,7 @@ static int slbt_exec_link_remove_file(
 	return SLBT_SYSTEM_ERROR(dctx,0);
 }
 
-int slbt_exec_link_create_archive(
+slbt_hidden int slbt_exec_link_create_archive(
 	const struct slbt_driver_ctx *	dctx,
 	struct slbt_exec_ctx *		ectx,
 	const char *			arfilename,
diff --git a/src/logic/linkcmd/slbt_linkcmd_argv.c b/src/logic/linkcmd/slbt_linkcmd_argv.c
index 0861a15..987bfc8 100644
--- a/src/logic/linkcmd/slbt_linkcmd_argv.c
+++ b/src/logic/linkcmd/slbt_linkcmd_argv.c
@@ -21,6 +21,7 @@
 #include "slibtool_snprintf_impl.h"
 #include "slibtool_symlink_impl.h"
 #include "slibtool_readlink_impl.h"
+#include "slibtool_visibility_impl.h"
 
 
 static int slbt_linkcmd_exit(
@@ -97,7 +98,7 @@ static int slbt_emit_fdwrap_amend_dl_path(
 }
 
 
-bool slbt_adjust_object_argument(
+slbt_hidden bool slbt_adjust_object_argument(
 	char *		arg,
 	bool		fpic,
 	bool		fany,
@@ -164,7 +165,7 @@ bool slbt_adjust_object_argument(
 }
 
 
-bool slbt_adjust_wrapper_argument(
+slbt_hidden bool slbt_adjust_wrapper_argument(
 	char *		arg,
 	bool		fpic)
 {
@@ -200,7 +201,7 @@ bool slbt_adjust_wrapper_argument(
 }
 
 
-int slbt_adjust_linker_argument(
+slbt_hidden int slbt_adjust_linker_argument(
 	const struct slbt_driver_ctx *	dctx,
 	char *				arg,
 	char **				xarg,
@@ -269,7 +270,7 @@ int slbt_adjust_linker_argument(
 }
 
 
-int slbt_exec_link_adjust_argument_vector(
+slbt_hidden int slbt_exec_link_adjust_argument_vector(
 	const struct slbt_driver_ctx *	dctx,
 	struct slbt_exec_ctx *		ectx,
 	struct slbt_deps_meta *		depsmeta,
@@ -559,7 +560,7 @@ int slbt_exec_link_adjust_argument_vector(
 }
 
 
-int slbt_exec_link_finalize_argument_vector(
+slbt_hidden int slbt_exec_link_finalize_argument_vector(
 	const struct slbt_driver_ctx *	dctx,
 	struct slbt_exec_ctx *		ectx)
 {
diff --git a/src/logic/linkcmd/slbt_linkcmd_deps.c b/src/logic/linkcmd/slbt_linkcmd_deps.c
index bb23e6f..7e72dee 100644
--- a/src/logic/linkcmd/slbt_linkcmd_deps.c
+++ b/src/logic/linkcmd/slbt_linkcmd_deps.c
@@ -18,8 +18,9 @@
 #include "slibtool_mapfile_impl.h"
 #include "slibtool_metafile_impl.h"
 #include "slibtool_snprintf_impl.h"
+#include "slibtool_visibility_impl.h"
 
-int slbt_get_deps_meta(
+slbt_hidden int slbt_get_deps_meta(
 	const struct slbt_driver_ctx *	dctx,
 	char *				libfilename,
 	int				fexternal,
@@ -86,7 +87,7 @@ int slbt_get_deps_meta(
 }
 
 
-int slbt_exec_link_create_dep_file(
+slbt_hidden int slbt_exec_link_create_dep_file(
 	const struct slbt_driver_ctx *	dctx,
 	struct slbt_exec_ctx *		ectx,
 	char **				altv,
diff --git a/src/logic/linkcmd/slbt_linkcmd_dsolib.c b/src/logic/linkcmd/slbt_linkcmd_dsolib.c
index f510abe..ed9aa6c 100644
--- a/src/logic/linkcmd/slbt_linkcmd_dsolib.c
+++ b/src/logic/linkcmd/slbt_linkcmd_dsolib.c
@@ -20,6 +20,7 @@
 #include "slibtool_snprintf_impl.h"
 #include "slibtool_symlink_impl.h"
 #include "slibtool_spawn_impl.h"
+#include "slibtool_visibility_impl.h"
 
 static int slbt_linkcmd_exit(
 	struct slbt_deps_meta *	depsmeta,
@@ -53,7 +54,7 @@ static int slbt_exec_link_remove_file(
 	return SLBT_SYSTEM_ERROR(dctx,0);
 }
 
-int slbt_exec_link_create_library(
+slbt_hidden int slbt_exec_link_create_library(
 	const struct slbt_driver_ctx *	dctx,
 	struct slbt_exec_ctx *		ectx,
 	const char *			dsobasename,
diff --git a/src/logic/linkcmd/slbt_linkcmd_executable.c b/src/logic/linkcmd/slbt_linkcmd_executable.c
index 9fd3274..a4c3b81 100644
--- a/src/logic/linkcmd/slbt_linkcmd_executable.c
+++ b/src/logic/linkcmd/slbt_linkcmd_executable.c
@@ -20,6 +20,7 @@
 #include "slibtool_snprintf_impl.h"
 #include "slibtool_symlink_impl.h"
 #include "slibtool_spawn_impl.h"
+#include "slibtool_visibility_impl.h"
 
 static int slbt_linkcmd_exit(
 	struct slbt_deps_meta *	depsmeta,
@@ -66,7 +67,7 @@ static void slbt_emit_fdwrap_dl_path_fixup(
 	strncat(dpfixup,"/",dpfixup_size-1);
 }
 
-int slbt_exec_link_create_executable(
+slbt_hidden int slbt_exec_link_create_executable(
 	const struct slbt_driver_ctx *	dctx,
 	struct slbt_exec_ctx *		ectx,
 	const char *			exefilename)
diff --git a/src/logic/linkcmd/slbt_linkcmd_host.c b/src/logic/linkcmd/slbt_linkcmd_host.c
index 8fc56b3..bf071d1 100644
--- a/src/logic/linkcmd/slbt_linkcmd_host.c
+++ b/src/logic/linkcmd/slbt_linkcmd_host.c
@@ -19,8 +19,9 @@
 #include "slibtool_metafile_impl.h"
 #include "slibtool_snprintf_impl.h"
 #include "slibtool_symlink_impl.h"
+#include "slibtool_visibility_impl.h"
 
-int slbt_exec_link_create_host_tag(
+slbt_hidden int slbt_exec_link_create_host_tag(
 	const struct slbt_driver_ctx *	dctx,
 	struct slbt_exec_ctx *		ectx,
 	char *				deffilename)
diff --git a/src/logic/linkcmd/slbt_linkcmd_implib.c b/src/logic/linkcmd/slbt_linkcmd_implib.c
index 9c8890e..810ff10 100644
--- a/src/logic/linkcmd/slbt_linkcmd_implib.c
+++ b/src/logic/linkcmd/slbt_linkcmd_implib.c
@@ -20,8 +20,9 @@
 #include "slibtool_snprintf_impl.h"
 #include "slibtool_symlink_impl.h"
 #include "slibtool_spawn_impl.h"
+#include "slibtool_visibility_impl.h"
 
-int slbt_exec_link_create_import_library(
+slbt_hidden int slbt_exec_link_create_import_library(
 	const struct slbt_driver_ctx *	dctx,
 	struct slbt_exec_ctx *		ectx,
 	char *				impfilename,
diff --git a/src/skin/slbt_skin_ar.c b/src/skin/slbt_skin_ar.c
index e0d87e4..eecc5b9 100644
--- a/src/skin/slbt_skin_ar.c
+++ b/src/skin/slbt_skin_ar.c
@@ -1,7 +1,8 @@
 #include "slibtool_driver_impl.h"
+#include "slibtool_visibility_impl.h"
 #include "argv/argv.h"
 
-const struct argv_option slbt_ar_options[] = {
+const slbt_hidden struct argv_option slbt_ar_options[] = {
 	{"version",	0,TAG_AR_VERSION,ARGV_OPTARG_NONE,0,0,0,
 			"show version information"},
 
diff --git a/src/skin/slbt_skin_default.c b/src/skin/slbt_skin_default.c
index b6f4135..03befd1 100644
--- a/src/skin/slbt_skin_default.c
+++ b/src/skin/slbt_skin_default.c
@@ -1,7 +1,8 @@
 #include "slibtool_driver_impl.h"
+#include "slibtool_visibility_impl.h"
 #include "argv/argv.h"
 
-const struct argv_option slbt_default_options[] = {
+const slbt_hidden struct argv_option slbt_default_options[] = {
 	{"version",		0,TAG_VERSION,ARGV_OPTARG_NONE,0,0,0,
 				"show version information"},
 
diff --git a/src/skin/slbt_skin_install.c b/src/skin/slbt_skin_install.c
index e8feb59..a6e6b15 100644
--- a/src/skin/slbt_skin_install.c
+++ b/src/skin/slbt_skin_install.c
@@ -1,7 +1,8 @@
 #include "slibtool_install_impl.h"
+#include "slibtool_visibility_impl.h"
 #include "argv/argv.h"
 
-const struct argv_option slbt_install_options[] = {
+const slbt_hidden struct argv_option slbt_install_options[] = {
 	{"help",	'h',TAG_INSTALL_HELP,ARGV_OPTARG_NONE,0,0,0,
 			"display install mode help"},
 
diff --git a/src/skin/slbt_skin_uninstall.c b/src/skin/slbt_skin_uninstall.c
index 02b3599..e197373 100644
--- a/src/skin/slbt_skin_uninstall.c
+++ b/src/skin/slbt_skin_uninstall.c
@@ -1,7 +1,8 @@
 #include "slibtool_uninstall_impl.h"
+#include "slibtool_visibility_impl.h"
 #include "argv/argv.h"
 
-const struct argv_option slbt_uninstall_options[] = {
+const slbt_hidden struct argv_option slbt_uninstall_options[] = {
 	{"help",	'h',TAG_UNINSTALL_HELP,ARGV_OPTARG_NONE,0,0,0,
 			"display uninstall mode help"},