diff --git a/libpurple/plugins/keyrings/kwallet/purplekwallet.cpp b/libpurple/plugins/keyrings/kwallet/purplekwallet.cpp
--- a/libpurple/plugins/keyrings/kwallet/purplekwallet.cpp
+++ b/libpurple/plugins/keyrings/kwallet/purplekwallet.cpp
@@ -539,10 +539,8 @@
 /******************************************************************************
  * Plugin Exports
  *****************************************************************************/
-G_BEGIN_DECLS
-
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(GError **error) {
+static GPluginPluginInfo *
+kwallet_query(G_GNUC_UNUSED GError **error) {
 	const gchar * const authors[] = {
 		"Pidgin Developers <devel@pidgin.im>",
 		NULL
@@ -563,8 +561,8 @@
 	));
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(GPluginPlugin *plugin, GError **error) {
+static gboolean
+kwallet_load(GPluginPlugin *plugin, GError **error) {
 	PurpleCredentialManager *manager = NULL;
 
 	purple_kwallet_provider_register_type(G_TYPE_MODULE(plugin));
@@ -590,8 +588,8 @@
 	                                                   error);
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(GPluginPlugin *plugin, GError **error) {
+static gboolean
+kwallet_unload(G_GNUC_UNUSED GPluginPlugin *plugin, GError **error) {
 	PurpleCredentialManager *manager = NULL;
 	gboolean ret = FALSE;
 
@@ -613,4 +611,6 @@
 	return TRUE;
 }
 
+G_BEGIN_DECLS
+GPLUGIN_NATIVE_PLUGIN_DECLARE(kwallet)
 G_END_DECLS
diff --git a/libpurple/plugins/keyrings/secretservice.c b/libpurple/plugins/keyrings/secretservice.c
--- a/libpurple/plugins/keyrings/secretservice.c
+++ b/libpurple/plugins/keyrings/secretservice.c
@@ -29,6 +29,9 @@
 
 #include <glib/gi18n-lib.h>
 
+#include <gplugin.h>
+#include <gplugin-native.h>
+
 #include <purple.h>
 
 #include <libsecret/secret.h>
@@ -274,14 +277,10 @@
 /******************************************************************************
  * Plugin Exports
  *****************************************************************************/
-G_MODULE_EXPORT GPluginPluginInfo *gplugin_query(GPluginPlugin *plugin, GError **error);
-G_MODULE_EXPORT gboolean gplugin_load(GPluginPlugin *plugin, GError **error);
-G_MODULE_EXPORT gboolean gplugin_unload(GPluginPlugin *plugin, GError **error);
-
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(GPluginPlugin *plugin, GError **error) {
+static GPluginPluginInfo *
+secret_service_query(G_GNUC_UNUSED GError **error) {
 	const gchar * const authors[] = {
-		"Elliott Sales de Andrade (qulogic[at]pidgin.im)",
+		"Pidgin Developers <devel@pidgin.im>",
 		NULL
 	};
 
@@ -301,8 +300,8 @@
 	));
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(GPluginPlugin *plugin, GError **error) {
+static gboolean
+secret_service_load(GPluginPlugin *plugin, GError **error) {
 	PurpleCredentialManager *manager = NULL;
 
 	purple_secret_service_register_type(G_TYPE_MODULE(plugin));
@@ -315,8 +314,8 @@
 	                                                   error);
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(GPluginPlugin *plugin, GError **error) {
+static gboolean
+secret_service_unload(G_GNUC_UNUSED GPluginPlugin *plugin, GError **error) {
 	PurpleCredentialManager *manager = NULL;
 	gboolean ret = FALSE;
 
@@ -331,3 +330,5 @@
 
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(secret_service)
diff --git a/libpurple/plugins/keyrings/wincred.c b/libpurple/plugins/keyrings/wincred.c
--- a/libpurple/plugins/keyrings/wincred.c
+++ b/libpurple/plugins/keyrings/wincred.c
@@ -21,6 +21,9 @@
 
 #include <glib/gi18n-lib.h>
 
+#include <gplugin.h>
+#include <gplugin-native.h>
+
 #include <purple.h>
 
 #include <wincred.h>
@@ -372,18 +375,10 @@
 /******************************************************************************
  * Plugin Exports
  *****************************************************************************/
-
-G_MODULE_EXPORT GPluginPluginInfo *gplugin_query(GError **error);
-G_MODULE_EXPORT gboolean gplugin_load(GPluginNativePlugin *plugin,
-                                      GError **error);
-G_MODULE_EXPORT gboolean gplugin_unload(GPluginNativePlugin *plugin,
-                                        GError **error);
-
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(GError **error)
-{
+static GPluginPluginInfo *
+wincred_query(G_GNUC_UNUSED GError **error) {
 	const gchar * const authors[] = {
-		"Tomek Wasilczyk <twasilczyk@pidgin.im>",
+		"Pidgin Developers <devel@pidgin.im>",
 		NULL
 	};
 
@@ -403,9 +398,8 @@
 	));
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(GPluginNativePlugin *plugin, GError **error)
-{
+static gboolean
+wincred_load(GPluginPlugin *plugin, GError **error) {
 	PurpleCredentialManager *manager = NULL;
 
 	purple_wincred_register_type(G_TYPE_MODULE(plugin));
@@ -418,9 +412,8 @@
 	                                                   error);
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(GPluginNativePlugin *plugin, GError **error)
-{
+static gboolean
+wincred_unload(G_GNUC_UNUSED GPluginPlugin *plugin, GError **error) {
 	PurpleCredentialManager *manager = NULL;
 	gboolean ret = FALSE;
 
@@ -435,3 +428,5 @@
 
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(wincred)
diff --git a/libpurple/plugins/notification-sound/notification-sound.c b/libpurple/plugins/notification-sound/notification-sound.c
--- a/libpurple/plugins/notification-sound/notification-sound.c
+++ b/libpurple/plugins/notification-sound/notification-sound.c
@@ -23,16 +23,14 @@
 
 #include <glib/gi18n-lib.h>
 
+#include <gplugin.h>
+#include <gplugin-native.h>
+
 #include <purple.h>
 #include "libpurple/glibcompat.h"
 
 #include <canberra.h>
 
-/* make the compiler happy... */
-G_MODULE_EXPORT GPluginPluginInfo *gplugin_query(GError **error);
-G_MODULE_EXPORT gboolean gplugin_load(GPluginPlugin *plugin, GError **error);
-G_MODULE_EXPORT gboolean gplugin_unload(GPluginPlugin *plugin, GError **error);
-
 #define PURPLE_NOTIFICATION_SOUND_DOMAIN \
 	g_quark_from_static_string("purple-notification-sound")
 
@@ -230,8 +228,8 @@
 /******************************************************************************
  * Plugin Exports
  *****************************************************************************/
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(GError **error) {
+static GPluginPluginInfo *
+notification_sound_query(G_GNUC_UNUSED GError **error) {
 	PurplePluginInfo *info = NULL;
 
 	const gchar * const authors[] = {
@@ -253,8 +251,8 @@
 	return GPLUGIN_PLUGIN_INFO(info);
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(GPluginPlugin *plugin, GError **error) {
+static gboolean
+notification_sound_load(GPluginPlugin *plugin, GError **error) {
 	gpointer conv_handle = NULL;
 	gint error_code = 0;
 
@@ -292,8 +290,8 @@
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(GPluginPlugin *plugin, GError **error) {
+static gboolean
+notification_sound_unload(GPluginPlugin *plugin, G_GNUC_UNUSED GError **error) {
 	purple_signals_disconnect_by_handle(plugin);
 
 	purple_notification_sound_save_prefs();
@@ -304,3 +302,4 @@
 	return TRUE;
 }
 
+GPLUGIN_NATIVE_PLUGIN_DECLARE(notification_sound)
diff --git a/libpurple/plugins/purple-toast.c b/libpurple/plugins/purple-toast.c
--- a/libpurple/plugins/purple-toast.c
+++ b/libpurple/plugins/purple-toast.c
@@ -20,15 +20,12 @@
  */
 #include <glib.h>
 #include <gmodule.h>
+
 #include <gplugin.h>
+#include <gplugin-native.h>
 
 #include <purple.h>
 
-/* make the compiler happy... */
-G_MODULE_EXPORT GPluginPluginInfo *gplugin_query(GError **error);
-G_MODULE_EXPORT gboolean gplugin_load(GPluginPlugin *plugin, GError **error);
-G_MODULE_EXPORT gboolean gplugin_unload(GPluginPlugin *plugin, GError **error);
-
 /******************************************************************************
  * Helpers
  *****************************************************************************/
@@ -192,8 +189,8 @@
 /******************************************************************************
  * Plugin Exports
  *****************************************************************************/
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(GError **error) {
+static GPluginPluginInfo *
+purple_toast_query(G_GNUC_UNUSED GError **error) {
 	PurplePluginInfo *info = NULL;
 
 	const gchar * const authors[] = {
@@ -214,8 +211,8 @@
 	return GPLUGIN_PLUGIN_INFO(info);
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(GPluginPlugin *plugin, GError **error) {
+static gboolean
+purple_toast_load(GPluginPlugin *plugin, G_GNUC_UNUSED GError **error) {
 	gpointer conv_handle = purple_conversations_get_handle();
 
 	purple_signal_connect(conv_handle,
@@ -235,7 +232,11 @@
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(GPluginPlugin *plugin, GError **error) {
+static gboolean
+purple_toast_unload(G_GNUC_UNUSED GPluginPlugin *plugin,
+                    G_GNUC_UNUSED GError **error)
+{
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(purple_toast)
