diff --git a/Makefile b/Makefile
index 6e292718c1..323b20f062 100644
--- a/Makefile
+++ b/Makefile
@@ -175,6 +175,14 @@ HTTP_DOCSDIR=/var/www/html
 # Determine by a grep 'ScriptAlias' of your Apache httpd.conf file
 HTTP_CGIDIR=/var/www/cgi-bin
 
+# If your platform's linker expects a prefix on symbols generated from compiling C
+# source files, set LINKER_SYMBOL_PREFIX to that value. On some systems, exported symbols
+# from C source files are prefixed with '_', for example. If this value is not set
+# properly, the linker scripts that live in the '*.exports' files in various places
+# in this tree will unintentionally suppress symbols that should be visible
+# in the final binary objects.
+LINKER_SYMBOL_PREFIX=
+
 # Uncomment this to use the older DSP routines
 #_ASTCFLAGS+=-DOLD_DSP_ROUTINES
 
diff --git a/Makefile.moddir_rules b/Makefile.moddir_rules
index 00494a8b51..b883548afa 100644
--- a/Makefile.moddir_rules
+++ b/Makefile.moddir_rules
@@ -129,6 +129,7 @@ uninstall::
 dist-clean::
 	rm -f .*.moduleinfo .moduleinfo
 	rm -f .*.makeopts .makeopts
+	rm -f *.exports
 
 .%.moduleinfo: %.c
 	@echo "<member name=\"$*\" displayname=\"$(shell $(GREP) -e AST_MODULE_INFO $< | head -n 1 | cut -d '"' -f 2)\" remove_on_change=\"$(SUBDIR)/$*.o $(SUBDIR)/$*.so\">" > $@
diff --git a/Makefile.rules b/Makefile.rules
index d917d87082..92d8bb7cc8 100644
--- a/Makefile.rules
+++ b/Makefile.rules
@@ -3,7 +3,7 @@
 # 
 # Makefile rules
 #
-# Copyright (C) 2006-2008, Digium, Inc.
+# Copyright (C) 2006-2010, Digium, Inc.
 #
 # Kevin P. Fleming <kpfleming@digium.com>
 #
@@ -117,10 +117,16 @@ endif
 	$(CMD_PREFIX) $(CXX) -o $@ -E $< $(MAKE_DEPS) $(CXX_CFLAGS)
 
 %.so: %.o
+ifeq ($(GNU_LD),1)
+	$(CMD_PREFIX) $(ASTTOPDIR)/build_tools/make_linker_version_script $* $(LINKER_SYMBOL_PREFIX)
+endif
 	$(ECHO_PREFIX) echo "   [LD] $^ -> $@"
 	$(CMD_PREFIX) $(CC) $(STATIC_BUILD) -o $@ $(CC_LDFLAGS_SO) $^ $(CC_LIBS)
 
 %.so: %.oo
+ifeq ($(GNU_LD),1)
+	$(CMD_PREFIX) $(ASTTOPDIR)/build_tools/make_linker_version_script $* $(LINKER_SYMBOL_PREFIX)
+endif
 	$(ECHO_PREFIX) echo "   [LDXX] $^ -> $@"
 	$(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(CXX_LDFLAGS_SO) $^ $(CXX_LIBS)
 
diff --git a/apps/app_voicemail.exports b/apps/app_voicemail.exports
deleted file mode 100644
index 52bce51467..0000000000
--- a/apps/app_voicemail.exports
+++ /dev/null
@@ -1,20 +0,0 @@
-{
-	global:
-		mm_critical;
-		mm_diskerror;
-		mm_dlog;
-		mm_exists;
-		mm_expunged;
-		mm_fatal;
-		mm_flags;
-		mm_list;
-		mm_log;
-		mm_login;
-		mm_lsub;
-		mm_nocritical;
-		mm_notify;
-		mm_searched;
-		mm_status;
-	local:
-		*;
-};
diff --git a/apps/app_voicemail.exports.in b/apps/app_voicemail.exports.in
new file mode 100644
index 0000000000..3520d22166
--- /dev/null
+++ b/apps/app_voicemail.exports.in
@@ -0,0 +1,20 @@
+{
+	global:
+		LINKER_SYMBOL_PREFIXmm_critical;
+		LINKER_SYMBOL_PREFIXmm_diskerror;
+		LINKER_SYMBOL_PREFIXmm_dlog;
+		LINKER_SYMBOL_PREFIXmm_exists;
+		LINKER_SYMBOL_PREFIXmm_expunged;
+		LINKER_SYMBOL_PREFIXmm_fatal;
+		LINKER_SYMBOL_PREFIXmm_flags;
+		LINKER_SYMBOL_PREFIXmm_list;
+		LINKER_SYMBOL_PREFIXmm_log;
+		LINKER_SYMBOL_PREFIXmm_login;
+		LINKER_SYMBOL_PREFIXmm_lsub;
+		LINKER_SYMBOL_PREFIXmm_nocritical;
+		LINKER_SYMBOL_PREFIXmm_notify;
+		LINKER_SYMBOL_PREFIXmm_searched;
+		LINKER_SYMBOL_PREFIXmm_status;
+	local:
+		*;
+};
diff --git a/build_tools/make_linker_version_script b/build_tools/make_linker_version_script
new file mode 100755
index 0000000000..8f3c2bb0a5
--- /dev/null
+++ b/build_tools/make_linker_version_script
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+test -f ${1}.exports.in && ${AWK} "{sub(\"LINKER_SYMBOL_PREFIX\", \"${2}\"); print;}" ${1}.exports.in > ${1}.exports
+test -f ${1}.exports.in || rm -f ${1}.exports
diff --git a/main/Makefile b/main/Makefile
index a019a08554..ada40fe61e 100644
--- a/main/Makefile
+++ b/main/Makefile
@@ -167,7 +167,7 @@ endif
 
 $(OBJS): _ASTCFLAGS+=-DAST_MODULE=\"core\"
 
-$(MAIN_TGT): $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) asterisk.exports
+$(MAIN_TGT): $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS)
 	@$(CC) -c -o buildinfo.o $(_ASTCFLAGS) buildinfo.c $(ASTCFLAGS)
 	$(ECHO_PREFIX) echo "   [LD] $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) -> $@"
 ifneq ($(findstring chan_h323,$(MENUSELECT_CHANNELS)),)
@@ -176,9 +176,16 @@ else
 	$(CMD_PREFIX) $(CXX) $(STATIC_BUILD) -o $@ $(ASTLINK) $(AST_EMBED_LDFLAGS) $(_ASTLDFLAGS) $(ASTLDFLAGS) $(H323LDFLAGS) $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS) buildinfo.o $(AST_LIBS) $(AST_EMBED_LIBS) $(H323LDLIBS) $(GMIMELDFLAGS)
 endif
 
+ifeq ($(GNU_LD),1)
+$(MAIN_TGT): asterisk.exports
+asterisk.exports: asterisk.exports.in
+	$(CMD_PREFIX) $(ASTTOPDIR)/build_tools/make_linker_version_script asterisk $(LINKER_SYMBOL_PREFIX)
+endif
+
 clean::
 	rm -f asterisk
 	rm -f db1-ast/.*.d
+	rm -f asterisk.exports
 	@if [ -f editline/Makefile ]; then $(MAKE) -C editline distclean ; fi
 	@$(MAKE) -C db1-ast clean
 	@$(MAKE) -C stdtime clean
diff --git a/main/asterisk.exports b/main/asterisk.exports
deleted file mode 100644
index 284bf36f25..0000000000
--- a/main/asterisk.exports
+++ /dev/null
@@ -1,45 +0,0 @@
-{
-	global:
-		ast_*;
-		_ast_*;
-		__ast_*;
-		pbx_*;
-		astman_*;
-		ao2_*;
-		__ao2_*;
-		option_debug;
-		option_verbose;
-		dahdi_chan_name;
-		dahdi_chan_name_len;
-		dahdi_chan_mode;
-		callerid_*;
-		cid_di;
-		cid_dr;
-		clidsb;
-		MD5*;
-		sched_*;
-		io_*;
-		jb_*;
-		aes_*;
-		config_*;
-		tdd_*;
-		term_*;
-		channelreloadreason2txt;
-		devstate2str;
-		__manager_event;
-		dialed_interface_info;
-		strsep;
-		setenv;
-		unsetenv;
-		strcasestr;
-		strnlen;
-		strndup;
-		vasprintf;
-		asprintf;
-		strtoq;
-		getloadavg;
-		ntohll;
-		htonll;
-	local:
-		*;
-};
diff --git a/main/asterisk.exports.in b/main/asterisk.exports.in
new file mode 100644
index 0000000000..ef1dcddc26
--- /dev/null
+++ b/main/asterisk.exports.in
@@ -0,0 +1,45 @@
+{
+	global:
+		LINKER_SYMBOL_PREFIXast_*;
+		LINKER_SYMBOL_PREFIX_ast_*;
+		LINKER_SYMBOL_PREFIX__ast_*;
+		LINKER_SYMBOL_PREFIXpbx_*;
+		LINKER_SYMBOL_PREFIXastman_*;
+		LINKER_SYMBOL_PREFIXao2_*;
+		LINKER_SYMBOL_PREFIX__ao2_*;
+		LINKER_SYMBOL_PREFIXoption_debug;
+		LINKER_SYMBOL_PREFIXoption_verbose;
+		LINKER_SYMBOL_PREFIXdahdi_chan_name;
+		LINKER_SYMBOL_PREFIXdahdi_chan_name_len;
+		LINKER_SYMBOL_PREFIXdahdi_chan_mode;
+		LINKER_SYMBOL_PREFIXcallerid_*;
+		LINKER_SYMBOL_PREFIXcid_di;
+		LINKER_SYMBOL_PREFIXcid_dr;
+		LINKER_SYMBOL_PREFIXclidsb;
+		LINKER_SYMBOL_PREFIXMD5*;
+		LINKER_SYMBOL_PREFIXsched_*;
+		LINKER_SYMBOL_PREFIXio_*;
+		LINKER_SYMBOL_PREFIXjb_*;
+		LINKER_SYMBOL_PREFIXaes_*;
+		LINKER_SYMBOL_PREFIXconfig_*;
+		LINKER_SYMBOL_PREFIXtdd_*;
+		LINKER_SYMBOL_PREFIXterm_*;
+		LINKER_SYMBOL_PREFIXchannelreloadreason2txt;
+		LINKER_SYMBOL_PREFIXdevstate2str;
+		LINKER_SYMBOL_PREFIX__manager_event;
+		LINKER_SYMBOL_PREFIXdialed_interface_info;
+		LINKER_SYMBOL_PREFIXstrsep;
+		LINKER_SYMBOL_PREFIXsetenv;
+		LINKER_SYMBOL_PREFIXunsetenv;
+		LINKER_SYMBOL_PREFIXstrcasestr;
+		LINKER_SYMBOL_PREFIXstrnlen;
+		LINKER_SYMBOL_PREFIXstrndup;
+		LINKER_SYMBOL_PREFIXvasprintf;
+		LINKER_SYMBOL_PREFIXasprintf;
+		LINKER_SYMBOL_PREFIXstrtoq;
+		LINKER_SYMBOL_PREFIXgetloadavg;
+		LINKER_SYMBOL_PREFIXntohll;
+		LINKER_SYMBOL_PREFIXhtonll;
+	local:
+		*;
+};
diff --git a/res/res_adsi.exports b/res/res_adsi.exports
deleted file mode 100644
index a4119dc1fd..0000000000
--- a/res/res_adsi.exports
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-	global:
-		ast_adsi_available;
-		ast_adsi_begin_download;
-		ast_adsi_channel_restore;
-		ast_adsi_clear_screen;
-		ast_adsi_clear_soft_keys;
-		ast_adsi_connect_session;
-		ast_adsi_data_mode;
-		ast_adsi_disconnect_session;
-		ast_adsi_display;
-		ast_adsi_download_connect;
-		ast_adsi_download_disconnect;
-		ast_adsi_end_download;
-		ast_adsi_get_cpeid;
-		ast_adsi_get_cpeinfo;
-		ast_adsi_input_control;
-		ast_adsi_input_format;
-		ast_adsi_load_session;
-		ast_adsi_load_soft_key;
-		ast_adsi_print;
-		ast_adsi_query_cpeid;
-		ast_adsi_query_cpeinfo;
-		ast_adsi_read_encoded_dtmf;
-		ast_adsi_set_keys;
-		ast_adsi_set_line;
-		ast_adsi_transmit_message;
-		ast_adsi_transmit_message_full;
-		ast_adsi_unload_session;
-		ast_adsi_voice_mode;
-	local:
-		*;
-};
diff --git a/res/res_adsi.exports.in b/res/res_adsi.exports.in
new file mode 100644
index 0000000000..480f0ead87
--- /dev/null
+++ b/res/res_adsi.exports.in
@@ -0,0 +1,33 @@
+{
+	global:
+		LINKER_SYMBOL_PREFIXast_adsi_available;
+		LINKER_SYMBOL_PREFIXast_adsi_begin_download;
+		LINKER_SYMBOL_PREFIXast_adsi_channel_restore;
+		LINKER_SYMBOL_PREFIXast_adsi_clear_screen;
+		LINKER_SYMBOL_PREFIXast_adsi_clear_soft_keys;
+		LINKER_SYMBOL_PREFIXast_adsi_connect_session;
+		LINKER_SYMBOL_PREFIXast_adsi_data_mode;
+		LINKER_SYMBOL_PREFIXast_adsi_disconnect_session;
+		LINKER_SYMBOL_PREFIXast_adsi_display;
+		LINKER_SYMBOL_PREFIXast_adsi_download_connect;
+		LINKER_SYMBOL_PREFIXast_adsi_download_disconnect;
+		LINKER_SYMBOL_PREFIXast_adsi_end_download;
+		LINKER_SYMBOL_PREFIXast_adsi_get_cpeid;
+		LINKER_SYMBOL_PREFIXast_adsi_get_cpeinfo;
+		LINKER_SYMBOL_PREFIXast_adsi_input_control;
+		LINKER_SYMBOL_PREFIXast_adsi_input_format;
+		LINKER_SYMBOL_PREFIXast_adsi_load_session;
+		LINKER_SYMBOL_PREFIXast_adsi_load_soft_key;
+		LINKER_SYMBOL_PREFIXast_adsi_print;
+		LINKER_SYMBOL_PREFIXast_adsi_query_cpeid;
+		LINKER_SYMBOL_PREFIXast_adsi_query_cpeinfo;
+		LINKER_SYMBOL_PREFIXast_adsi_read_encoded_dtmf;
+		LINKER_SYMBOL_PREFIXast_adsi_set_keys;
+		LINKER_SYMBOL_PREFIXast_adsi_set_line;
+		LINKER_SYMBOL_PREFIXast_adsi_transmit_message;
+		LINKER_SYMBOL_PREFIXast_adsi_transmit_message_full;
+		LINKER_SYMBOL_PREFIXast_adsi_unload_session;
+		LINKER_SYMBOL_PREFIXast_adsi_voice_mode;
+	local:
+		*;
+};
diff --git a/res/res_ael_share.exports b/res/res_ael_share.exports.in
similarity index 100%
rename from res/res_ael_share.exports
rename to res/res_ael_share.exports.in
diff --git a/res/res_agi.exports b/res/res_agi.exports
deleted file mode 100644
index a305cf2b90..0000000000
--- a/res/res_agi.exports
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-	global:
-		*ast_agi_register;
-		*ast_agi_unregister;
-		*ast_agi_register_multiple;
-		*ast_agi_unregister_multiple;
-		*ast_agi_send;
-	local:
-		*;
-};
diff --git a/res/res_agi.exports.in b/res/res_agi.exports.in
new file mode 100644
index 0000000000..cf4d276ddc
--- /dev/null
+++ b/res/res_agi.exports.in
@@ -0,0 +1,10 @@
+{
+	global:
+		LINKER_SYMBOL_PREFIX*ast_agi_register;
+		LINKER_SYMBOL_PREFIX*ast_agi_unregister;
+		LINKER_SYMBOL_PREFIX*ast_agi_register_multiple;
+		LINKER_SYMBOL_PREFIX*ast_agi_unregister_multiple;
+		LINKER_SYMBOL_PREFIX*ast_agi_send;
+	local:
+		*;
+};
diff --git a/res/res_calendar.exports b/res/res_calendar.exports
deleted file mode 100644
index 021d395b35..0000000000
--- a/res/res_calendar.exports
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-	global:
-		ast_*;
-		calendar_config;
-	local:
-		*;
-};
diff --git a/res/res_calendar.exports.in b/res/res_calendar.exports.in
new file mode 100644
index 0000000000..7fbe4ca78a
--- /dev/null
+++ b/res/res_calendar.exports.in
@@ -0,0 +1,7 @@
+{
+	global:
+		LINKER_SYMBOL_PREFIXast_*;
+		LINKER_SYMBOL_PREFIXcalendar_config;
+	local:
+		*;
+};
diff --git a/res/res_fax.exports b/res/res_fax.exports
deleted file mode 100644
index 0ffe0b3273..0000000000
--- a/res/res_fax.exports
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-	global:
-		ast_fax_tech_register;
-		ast_fax_tech_unregister;
-		ast_fax_session_unreference;
-		ast_fax_minrate;
-		ast_fax_maxrate;
-		ast_fax_state_to_str;
-	local:
-		*;
-};
diff --git a/res/res_fax.exports.in b/res/res_fax.exports.in
new file mode 100644
index 0000000000..7cd569007a
--- /dev/null
+++ b/res/res_fax.exports.in
@@ -0,0 +1,11 @@
+{
+	global:
+		LINKER_SYMBOL_PREFIXast_fax_tech_register;
+		LINKER_SYMBOL_PREFIXast_fax_tech_unregister;
+		LINKER_SYMBOL_PREFIXast_fax_session_unreference;
+		LINKER_SYMBOL_PREFIXast_fax_minrate;
+		LINKER_SYMBOL_PREFIXast_fax_maxrate;
+		LINKER_SYMBOL_PREFIXast_fax_state_to_str;
+	local:
+		*;
+};
diff --git a/res/res_features.exports b/res/res_features.exports
deleted file mode 100644
index 344a652c8e..0000000000
--- a/res/res_features.exports
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-	global:
-		ast_bridge_call;
-		ast_masq_park_call;
-		ast_park_call;
-		ast_parking_ext;
-		ast_pickup_call;
-		ast_pickup_ext;
-		ast_register_feature;
-		ast_unregister_feature;
-	local:
-		*;
-};
diff --git a/res/res_features.exports.in b/res/res_features.exports.in
new file mode 100644
index 0000000000..0575e98e51
--- /dev/null
+++ b/res/res_features.exports.in
@@ -0,0 +1,13 @@
+{
+	global:
+		LINKER_SYMBOL_PREFIXast_bridge_call;
+		LINKER_SYMBOL_PREFIXast_masq_park_call;
+		LINKER_SYMBOL_PREFIXast_park_call;
+		LINKER_SYMBOL_PREFIXast_parking_ext;
+		LINKER_SYMBOL_PREFIXast_pickup_call;
+		LINKER_SYMBOL_PREFIXast_pickup_ext;
+		LINKER_SYMBOL_PREFIXast_register_feature;
+		LINKER_SYMBOL_PREFIXast_unregister_feature;
+	local:
+		*;
+};
diff --git a/res/res_jabber.exports b/res/res_jabber.exports
deleted file mode 100644
index c20bd02565..0000000000
--- a/res/res_jabber.exports
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-	global:
-		ast_aji_create_chat;
-		ast_aji_disconnect;
-		ast_aji_get_client;
-		ast_aji_get_clients;
-		ast_aji_increment_mid;
-		ast_aji_invite_chat;
-		ast_aji_join_chat;
-		ast_aji_send;
-		ast_aji_send_chat;
-	local:
-		*;
-};
diff --git a/res/res_jabber.exports.in b/res/res_jabber.exports.in
new file mode 100644
index 0000000000..a021ac5939
--- /dev/null
+++ b/res/res_jabber.exports.in
@@ -0,0 +1,14 @@
+{
+	global:
+		LINKER_SYMBOL_PREFIXast_aji_create_chat;
+		LINKER_SYMBOL_PREFIXast_aji_disconnect;
+		LINKER_SYMBOL_PREFIXast_aji_get_client;
+		LINKER_SYMBOL_PREFIXast_aji_get_clients;
+		LINKER_SYMBOL_PREFIXast_aji_increment_mid;
+		LINKER_SYMBOL_PREFIXast_aji_invite_chat;
+		LINKER_SYMBOL_PREFIXast_aji_join_chat;
+		LINKER_SYMBOL_PREFIXast_aji_send;
+		LINKER_SYMBOL_PREFIXast_aji_send_chat;
+	local:
+		*;
+};
diff --git a/res/res_monitor.exports b/res/res_monitor.exports
deleted file mode 100644
index 0c97f6a808..0000000000
--- a/res/res_monitor.exports
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-	global:
-		*ast_monitor_change_fname;
-		*ast_monitor_pause;
-		*ast_monitor_setjoinfiles;
-		*ast_monitor_start;
-		*ast_monitor_stop;
-		*ast_monitor_unpause;
-	local:
-		*;
-};
diff --git a/res/res_monitor.exports.in b/res/res_monitor.exports.in
new file mode 100644
index 0000000000..4a40724425
--- /dev/null
+++ b/res/res_monitor.exports.in
@@ -0,0 +1,11 @@
+{
+	global:
+		LINKER_SYMBOL_PREFIX*ast_monitor_change_fname;
+		LINKER_SYMBOL_PREFIX*ast_monitor_pause;
+		LINKER_SYMBOL_PREFIX*ast_monitor_setjoinfiles;
+		LINKER_SYMBOL_PREFIX*ast_monitor_start;
+		LINKER_SYMBOL_PREFIX*ast_monitor_stop;
+		LINKER_SYMBOL_PREFIX*ast_monitor_unpause;
+	local:
+		*;
+};
diff --git a/res/res_odbc.exports b/res/res_odbc.exports
deleted file mode 100644
index 0512ab809f..0000000000
--- a/res/res_odbc.exports
+++ /dev/null
@@ -1,20 +0,0 @@
-{
-	global:
-		ast_odbc_ast_str_SQLGetData;
-		ast_odbc_backslash_is_escape;
-		ast_odbc_clear_cache;
-		ast_odbc_direct_execute;
-		ast_odbc_find_column;
-		ast_odbc_find_table;
-		ast_odbc_prepare_and_execute;
-		ast_odbc_release_obj;
-		ast_odbc_request_obj;
-		_ast_odbc_request_obj;
-		ast_odbc_request_obj2;
-		_ast_odbc_request_obj2;
-		ast_odbc_retrieve_transaction_obj;
-		ast_odbc_sanity_check;
-		ast_odbc_smart_execute;
-	local:
-		*;
-};
diff --git a/res/res_odbc.exports.in b/res/res_odbc.exports.in
new file mode 100644
index 0000000000..ad674beb17
--- /dev/null
+++ b/res/res_odbc.exports.in
@@ -0,0 +1,20 @@
+{
+	global:
+		LINKER_SYMBOL_PREFIXast_odbc_ast_str_SQLGetData;
+		LINKER_SYMBOL_PREFIXast_odbc_backslash_is_escape;
+		LINKER_SYMBOL_PREFIXast_odbc_clear_cache;
+		LINKER_SYMBOL_PREFIXast_odbc_direct_execute;
+		LINKER_SYMBOL_PREFIXast_odbc_find_column;
+		LINKER_SYMBOL_PREFIXast_odbc_find_table;
+		LINKER_SYMBOL_PREFIXast_odbc_prepare_and_execute;
+		LINKER_SYMBOL_PREFIXast_odbc_release_obj;
+		LINKER_SYMBOL_PREFIXast_odbc_request_obj;
+		LINKER_SYMBOL_PREFIX_ast_odbc_request_obj;
+		LINKER_SYMBOL_PREFIXast_odbc_request_obj2;
+		LINKER_SYMBOL_PREFIX_ast_odbc_request_obj2;
+		LINKER_SYMBOL_PREFIXast_odbc_retrieve_transaction_obj;
+		LINKER_SYMBOL_PREFIXast_odbc_sanity_check;
+		LINKER_SYMBOL_PREFIXast_odbc_smart_execute;
+	local:
+		*;
+};
diff --git a/res/res_pktccops.exports b/res/res_pktccops.exports
deleted file mode 100644
index 72cd65ba8d..0000000000
--- a/res/res_pktccops.exports
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-	global:
-		ast_pktccops_gate_alloc;
-	local:
-		*;
-};
diff --git a/res/res_pktccops.exports.in b/res/res_pktccops.exports.in
new file mode 100644
index 0000000000..1892e5bc64
--- /dev/null
+++ b/res/res_pktccops.exports.in
@@ -0,0 +1,6 @@
+{
+	global:
+		LINKER_SYMBOL_PREFIXast_pktccops_gate_alloc;
+	local:
+		*;
+};
diff --git a/res/res_smdi.exports b/res/res_smdi.exports
deleted file mode 100644
index e140aba9f1..0000000000
--- a/res/res_smdi.exports
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-	global:
-		*ast_smdi_interface_find;
-		*ast_smdi_interface_unref;
-		*ast_smdi_md_message_destroy;
-		*ast_smdi_md_message_pop;
-		*ast_smdi_md_message_putback;
-		*ast_smdi_md_message_wait;
-		*ast_smdi_mwi_message_destroy;
-		*ast_smdi_mwi_message_pop;
-		*ast_smdi_mwi_message_putback;
-		*ast_smdi_mwi_message_wait;
-		*ast_smdi_mwi_message_wait_station;
-		*ast_smdi_mwi_set;
-		*ast_smdi_mwi_unset;
-	local:
-		*;
-};
diff --git a/res/res_smdi.exports.in b/res/res_smdi.exports.in
new file mode 100644
index 0000000000..ef0ba5df58
--- /dev/null
+++ b/res/res_smdi.exports.in
@@ -0,0 +1,18 @@
+{
+	global:
+		LINKER_SYMBOL_PREFIX*ast_smdi_interface_find;
+		LINKER_SYMBOL_PREFIX*ast_smdi_interface_unref;
+		LINKER_SYMBOL_PREFIX*ast_smdi_md_message_destroy;
+		LINKER_SYMBOL_PREFIX*ast_smdi_md_message_pop;
+		LINKER_SYMBOL_PREFIX*ast_smdi_md_message_putback;
+		LINKER_SYMBOL_PREFIX*ast_smdi_md_message_wait;
+		LINKER_SYMBOL_PREFIX*ast_smdi_mwi_message_destroy;
+		LINKER_SYMBOL_PREFIX*ast_smdi_mwi_message_pop;
+		LINKER_SYMBOL_PREFIX*ast_smdi_mwi_message_putback;
+		LINKER_SYMBOL_PREFIX*ast_smdi_mwi_message_wait;
+		LINKER_SYMBOL_PREFIX*ast_smdi_mwi_message_wait_station;
+		LINKER_SYMBOL_PREFIX*ast_smdi_mwi_set;
+		LINKER_SYMBOL_PREFIX*ast_smdi_mwi_unset;
+	local:
+		*;
+};
diff --git a/res/res_speech.exports b/res/res_speech.exports
deleted file mode 100644
index 2266607357..0000000000
--- a/res/res_speech.exports
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-	global:
-		ast_speech_change;
-		ast_speech_change_results_type;
-		ast_speech_change_state;
-		ast_speech_destroy;
-		ast_speech_dtmf;
-		ast_speech_grammar_activate;
-		ast_speech_grammar_deactivate;
-		ast_speech_grammar_load;
-		ast_speech_grammar_unload;
-		ast_speech_new;
-		ast_speech_register;
-		ast_speech_results_free;
-		ast_speech_results_get;
-		ast_speech_start;
-		ast_speech_unregister;
-		ast_speech_write;
-	local:
-		*;
-};
diff --git a/res/res_speech.exports.in b/res/res_speech.exports.in
new file mode 100644
index 0000000000..2bdb6398bb
--- /dev/null
+++ b/res/res_speech.exports.in
@@ -0,0 +1,21 @@
+{
+	global:
+		LINKER_SYMBOL_PREFIXast_speech_change;
+		LINKER_SYMBOL_PREFIXast_speech_change_results_type;
+		LINKER_SYMBOL_PREFIXast_speech_change_state;
+		LINKER_SYMBOL_PREFIXast_speech_destroy;
+		LINKER_SYMBOL_PREFIXast_speech_dtmf;
+		LINKER_SYMBOL_PREFIXast_speech_grammar_activate;
+		LINKER_SYMBOL_PREFIXast_speech_grammar_deactivate;
+		LINKER_SYMBOL_PREFIXast_speech_grammar_load;
+		LINKER_SYMBOL_PREFIXast_speech_grammar_unload;
+		LINKER_SYMBOL_PREFIXast_speech_new;
+		LINKER_SYMBOL_PREFIXast_speech_register;
+		LINKER_SYMBOL_PREFIXast_speech_results_free;
+		LINKER_SYMBOL_PREFIXast_speech_results_get;
+		LINKER_SYMBOL_PREFIXast_speech_start;
+		LINKER_SYMBOL_PREFIXast_speech_unregister;
+		LINKER_SYMBOL_PREFIXast_speech_write;
+	local:
+		*;
+};