diff --git a/gplugin/tests/bad-plugins/query-error.c b/gplugin/tests/bad-plugins/query-error.c
--- a/gplugin/tests/bad-plugins/query-error.c
+++ b/gplugin/tests/bad-plugins/query-error.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,26 +18,28 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+query_error_query(G_GNUC_UNUSED GError **error)
 {
 	g_set_error(error, GPLUGIN_DOMAIN, 0, "expected error");
 
 	return NULL;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+query_error_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+query_error_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(query_error)
diff --git a/gplugin/tests/bind-global/bind-global.c b/gplugin/tests/bind-global/bind-global.c
--- a/gplugin/tests/bind-global/bind-global.c
+++ b/gplugin/tests/bind-global/bind-global.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+bind_global_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format off */
 	return gplugin_plugin_info_new(
@@ -30,18 +30,20 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+bind_global_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+bind_global_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(bind_global)
diff --git a/gplugin/tests/dynamic-type/dynamic-type-provider.c b/gplugin/tests/dynamic-type/dynamic-type-provider.c
--- a/gplugin/tests/dynamic-type/dynamic-type-provider.c
+++ b/gplugin/tests/dynamic-type/dynamic-type-provider.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  * Copyright (C) 2013 Ankit Vani <a@nevitus.org>
  *
  * This library is free software; you can redistribute it and/or
@@ -38,8 +38,8 @@
 {
 }
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+dynamic_provider_query(G_GNUC_UNUSED GError **error)
 {
 	return gplugin_plugin_info_new(
 		"gplugin/dynamic-type-provider",
@@ -49,18 +49,22 @@
 		NULL);
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(GPluginNativePlugin *plugin, G_GNUC_UNUSED GError **error)
+static gboolean
+dynamic_provider_load(
+	GPluginPlugin *plugin,
+	G_GNUC_UNUSED GError **error)
 {
 	dynamic_test_register_type(G_TYPE_MODULE(plugin));
 
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+dynamic_provider_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(dynamic_provider)
diff --git a/gplugin/tests/dynamic-type/dynamic-type-user.c b/gplugin/tests/dynamic-type/dynamic-type-user.c
--- a/gplugin/tests/dynamic-type/dynamic-type-user.c
+++ b/gplugin/tests/dynamic-type/dynamic-type-user.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  * Copyright (C) 2013 Ankit Vani <a@nevitus.org>
  *
  * This library is free software; you can redistribute it and/or
@@ -23,8 +23,8 @@
 
 static DynamicTest *test_object = NULL;
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+dynamic_user_query(G_GNUC_UNUSED GError **error)
 {
 	const gchar *const dependencies[] = {"gplugin/dynamic-type-provider", NULL};
 
@@ -37,8 +37,8 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(G_GNUC_UNUSED GPluginNativePlugin *plugin, GError **error)
+static gboolean
+dynamic_user_load(G_GNUC_UNUSED GPluginPlugin *plugin, GError **error)
 {
 	test_object = g_object_new(DYNAMIC_TYPE_TEST, NULL);
 
@@ -54,8 +54,8 @@
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(G_GNUC_UNUSED GPluginNativePlugin *plugin, GError **error)
+static gboolean
+dynamic_user_unload(G_GNUC_UNUSED GPluginPlugin *plugin, GError **error)
 {
 	gpointer weak_test_object = test_object;
 	g_object_add_weak_pointer(G_OBJECT(test_object), &weak_test_object);
@@ -69,3 +69,5 @@
 
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(dynamic_user)
diff --git a/gplugin/tests/id-collision/id-collision1.c b/gplugin/tests/id-collision/id-collision1.c
--- a/gplugin/tests/id-collision/id-collision1.c
+++ b/gplugin/tests/id-collision/id-collision1.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+id_collision1_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format off */
 	return gplugin_plugin_info_new(
@@ -30,18 +30,20 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+id_collision1_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+id_collision1_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(id_collision1)
diff --git a/gplugin/tests/id-collision/id-collision2.c b/gplugin/tests/id-collision/id-collision2.c
--- a/gplugin/tests/id-collision/id-collision2.c
+++ b/gplugin/tests/id-collision/id-collision2.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+id_collision2_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format off */
 	return gplugin_plugin_info_new(
@@ -30,18 +30,20 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+id_collision2_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+id_collision2_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(id_collision2)
diff --git a/gplugin/tests/load-on-query-fail/load-on-query-fail.c b/gplugin/tests/load-on-query-fail/load-on-query-fail.c
--- a/gplugin/tests/load-on-query-fail/load-on-query-fail.c
+++ b/gplugin/tests/load-on-query-fail/load-on-query-fail.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+loq_fail_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format off */
 	return gplugin_plugin_info_new(
@@ -30,8 +30,8 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(G_GNUC_UNUSED GPluginNativePlugin *plugin, GError **error)
+static gboolean
+loq_fail_load(G_GNUC_UNUSED GPluginPlugin *plugin, GError **error)
 {
 	static int count = 1;
 
@@ -40,10 +40,12 @@
 	return FALSE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+loq_fail_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(loq_fail)
diff --git a/gplugin/tests/load-on-query-pass/load-on-query-pass.c b/gplugin/tests/load-on-query-pass/load-on-query-pass.c
--- a/gplugin/tests/load-on-query-pass/load-on-query-pass.c
+++ b/gplugin/tests/load-on-query-pass/load-on-query-pass.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+loq_pass_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format off */
 	return gplugin_plugin_info_new(
@@ -30,18 +30,20 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+loq_pass_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+loq_pass_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(loq_pass)
diff --git a/gplugin/tests/newest-version/multiple-semantic-1.0.0.c b/gplugin/tests/newest-version/multiple-semantic-1.0.0.c
--- a/gplugin/tests/newest-version/multiple-semantic-1.0.0.c
+++ b/gplugin/tests/newest-version/multiple-semantic-1.0.0.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+multiple_semantic_1_0_0_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format off */
 	return gplugin_plugin_info_new(
@@ -30,18 +30,20 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+multiple_semantic_1_0_0_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+multiple_semantic_1_0_0_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(multiple_semantic_1_0_0)
diff --git a/gplugin/tests/newest-version/multiple-semantic-1.1.0.c b/gplugin/tests/newest-version/multiple-semantic-1.1.0.c
--- a/gplugin/tests/newest-version/multiple-semantic-1.1.0.c
+++ b/gplugin/tests/newest-version/multiple-semantic-1.1.0.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+multiple_semantic_1_1_0_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format off */
 	return gplugin_plugin_info_new(
@@ -30,18 +30,20 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+multiple_semantic_1_1_0_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+multiple_semantic_1_1_0_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(multiple_semantic_1_1_0)
diff --git a/gplugin/tests/newest-version/no-version-and-semantic-no-version.c b/gplugin/tests/newest-version/no-version-and-semantic-no-version.c
--- a/gplugin/tests/newest-version/no-version-and-semantic-no-version.c
+++ b/gplugin/tests/newest-version/no-version-and-semantic-no-version.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+no_version_and_semantic_no_version_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format off */
 	return gplugin_plugin_info_new(
@@ -29,18 +29,20 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+no_version_and_semantic_no_version_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+no_version_and_semantic_no_version_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(no_version_and_semantic_no_version)
diff --git a/gplugin/tests/newest-version/no-version-and-semantic-semantic.c b/gplugin/tests/newest-version/no-version-and-semantic-semantic.c
--- a/gplugin/tests/newest-version/no-version-and-semantic-semantic.c
+++ b/gplugin/tests/newest-version/no-version-and-semantic-semantic.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+no_version_an_semantic_semantic_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format off */
 	return gplugin_plugin_info_new(
@@ -30,18 +30,20 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+no_version_an_semantic_semantic_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+no_version_an_semantic_semantic_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(no_version_an_semantic_semantic)
diff --git a/gplugin/tests/newest-version/non-semantic-and-semantic-non-semantic.c b/gplugin/tests/newest-version/non-semantic-and-semantic-non-semantic.c
--- a/gplugin/tests/newest-version/non-semantic-and-semantic-non-semantic.c
+++ b/gplugin/tests/newest-version/non-semantic-and-semantic-non-semantic.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+non_semantic_and_semantic_non_semantic_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format off */
 	return gplugin_plugin_info_new(
@@ -30,18 +30,20 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+non_semantic_and_semantic_non_semantic_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+non_semantic_and_semantic_non_semantic_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(non_semantic_and_semantic_non_semantic)
diff --git a/gplugin/tests/newest-version/non-semantic-and-semantic-semantic.c b/gplugin/tests/newest-version/non-semantic-and-semantic-semantic.c
--- a/gplugin/tests/newest-version/non-semantic-and-semantic-semantic.c
+++ b/gplugin/tests/newest-version/non-semantic-and-semantic-semantic.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+non_semantic_and_semantic_semantic_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format off */
 	return gplugin_plugin_info_new(
@@ -30,18 +30,20 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+non_semantic_and_semantic_semantic_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+non_semantic_and_semantic_semantic_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(non_semantic_and_semantic_semantic)
diff --git a/gplugin/tests/newest-version/solo-no-version.c b/gplugin/tests/newest-version/solo-no-version.c
--- a/gplugin/tests/newest-version/solo-no-version.c
+++ b/gplugin/tests/newest-version/solo-no-version.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+solo_no_version_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format off */
 	return gplugin_plugin_info_new(
@@ -29,18 +29,20 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+solo_no_version_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+solo_no_version_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(solo_no_version)
diff --git a/gplugin/tests/newest-version/solo-non-semantic.c b/gplugin/tests/newest-version/solo-non-semantic.c
--- a/gplugin/tests/newest-version/solo-non-semantic.c
+++ b/gplugin/tests/newest-version/solo-non-semantic.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+solo_non_semantic_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format off */
 	return gplugin_plugin_info_new(
@@ -30,18 +30,20 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+solo_non_semantic_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+solo_non_semantic_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(solo_non_semantic)
diff --git a/gplugin/tests/plugins/basic-plugin.c b/gplugin/tests/plugins/basic-plugin.c
--- a/gplugin/tests/plugins/basic-plugin.c
+++ b/gplugin/tests/plugins/basic-plugin.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+basic_query(G_GNUC_UNUSED GError **error)
 {
 	const gchar *const authors[] = {"author1", NULL};
 
@@ -39,18 +39,20 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+basic_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+basic_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(basic)
diff --git a/gplugin/tests/plugins/broken-dependent-plugin.c b/gplugin/tests/plugins/broken-dependent-plugin.c
--- a/gplugin/tests/plugins/broken-dependent-plugin.c
+++ b/gplugin/tests/plugins/broken-dependent-plugin.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+broken_dependent_query(G_GNUC_UNUSED GError **error)
 {
 	const gchar *const dependencies[] = {"gplugin/does-not-exist", NULL};
 
@@ -32,18 +32,20 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+gboolean
+broken_dependent_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+broken_dependent_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(broken_dependent)
diff --git a/gplugin/tests/plugins/dependent-plugin.c b/gplugin/tests/plugins/dependent-plugin.c
--- a/gplugin/tests/plugins/dependent-plugin.c
+++ b/gplugin/tests/plugins/dependent-plugin.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+dependent_query(G_GNUC_UNUSED GError **error)
 {
 	const gchar *const dependencies[] = {"dependency1", "dependency2", NULL};
 
@@ -32,18 +32,20 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+dependent_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+dependent_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(dependent)
diff --git a/gplugin/tests/plugins/load-exception.c b/gplugin/tests/plugins/load-exception.c
--- a/gplugin/tests/plugins/load-exception.c
+++ b/gplugin/tests/plugins/load-exception.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+load_exception_query(G_GNUC_UNUSED GError **error)
 {
 	return gplugin_plugin_info_new(
 		"gplugin/native-load-exception",
@@ -27,18 +27,20 @@
 		NULL);
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+load_exception_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return FALSE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+load_exception_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(load_exception)
diff --git a/gplugin/tests/plugins/load-failed.c b/gplugin/tests/plugins/load-failed.c
--- a/gplugin/tests/plugins/load-failed.c
+++ b/gplugin/tests/plugins/load-failed.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+load_failed_query(G_GNUC_UNUSED GError **error)
 {
 	return gplugin_plugin_info_new(
 		"gplugin/native-load-failed",
@@ -27,18 +27,20 @@
 		NULL);
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(G_GNUC_UNUSED GPluginNativePlugin *plugin, GError **error)
+static gboolean
+load_failed_load(G_GNUC_UNUSED GPluginPlugin *plugin, GError **error)
 {
 	g_set_error(error, GPLUGIN_DOMAIN, 0, "expected error");
 
 	return FALSE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+load_failed_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(load_failed)
diff --git a/gplugin/tests/plugins/unload-failed.c b/gplugin/tests/plugins/unload-failed.c
--- a/gplugin/tests/plugins/unload-failed.c
+++ b/gplugin/tests/plugins/unload-failed.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+unload_failed_query(G_GNUC_UNUSED GError **error)
 {
 	return gplugin_plugin_info_new(
 		"gplugin/native-unload-failed",
@@ -27,18 +27,20 @@
 		NULL);
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+unload_failed_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(G_GNUC_UNUSED GPluginNativePlugin *plugin, GError **error)
+static gboolean
+unload_failed_unload(G_GNUC_UNUSED GPluginPlugin *plugin, GError **error)
 {
 	g_set_error(error, GPLUGIN_DOMAIN, 0, "expected error");
 
 	return FALSE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(unload_failed)
diff --git a/gplugin/tests/unresolved-symbol/unresolved-symbol.c b/gplugin/tests/unresolved-symbol/unresolved-symbol.c
--- a/gplugin/tests/unresolved-symbol/unresolved-symbol.c
+++ b/gplugin/tests/unresolved-symbol/unresolved-symbol.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -20,26 +20,28 @@
 
 void some_unresolved_symbol(void);
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+unresolved_symbol_query(G_GNUC_UNUSED GError **error)
 {
 	some_unresolved_symbol();
 
 	return NULL;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+unresolved_symbol_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+unresolved_symbol_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(unresolved_symbol)
diff --git a/gplugin/tests/versioned-dependencies/bar.c b/gplugin/tests/versioned-dependencies/bar.c
--- a/gplugin/tests/versioned-dependencies/bar.c
+++ b/gplugin/tests/versioned-dependencies/bar.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+bar_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format off */
 	return gplugin_plugin_info_new(
@@ -30,18 +30,16 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
-	G_GNUC_UNUSED GError **error)
+static gboolean
+bar_load(G_GNUC_UNUSED GPluginPlugin *plugin, G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
-	G_GNUC_UNUSED GError **error)
+static gboolean
+bar_unload(G_GNUC_UNUSED GPluginPlugin *plugin, G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(bar)
diff --git a/gplugin/tests/versioned-dependencies/baz.c b/gplugin/tests/versioned-dependencies/baz.c
--- a/gplugin/tests/versioned-dependencies/baz.c
+++ b/gplugin/tests/versioned-dependencies/baz.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+baz_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format off */
 	return gplugin_plugin_info_new(
@@ -30,18 +30,16 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
-	G_GNUC_UNUSED GError **error)
+static gboolean
+baz_load(G_GNUC_UNUSED GPluginPlugin *plugin, G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
-	G_GNUC_UNUSED GError **error)
+static gboolean
+baz_unload(G_GNUC_UNUSED GPluginPlugin *plugin, G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(baz)
diff --git a/gplugin/tests/versioned-dependencies/exact1.c b/gplugin/tests/versioned-dependencies/exact1.c
--- a/gplugin/tests/versioned-dependencies/exact1.c
+++ b/gplugin/tests/versioned-dependencies/exact1.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+exact1_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format off */
 	return gplugin_plugin_info_new(
@@ -30,18 +30,16 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
-	G_GNUC_UNUSED GError **error)
+static gboolean
+exact1_load(G_GNUC_UNUSED GPluginPlugin *plugin, G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
-	G_GNUC_UNUSED GError **error)
+static gboolean
+exact1_unload(G_GNUC_UNUSED GPluginPlugin *plugin, G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(exact1)
diff --git a/gplugin/tests/versioned-dependencies/exact2.c b/gplugin/tests/versioned-dependencies/exact2.c
--- a/gplugin/tests/versioned-dependencies/exact2.c
+++ b/gplugin/tests/versioned-dependencies/exact2.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+exact2_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format off */
 	return gplugin_plugin_info_new(
@@ -30,18 +30,16 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
-	G_GNUC_UNUSED GError **error)
+static gboolean
+exact2_load(G_GNUC_UNUSED GPluginPlugin *plugin, G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
-	G_GNUC_UNUSED GError **error)
+static gboolean
+exact2_unload(G_GNUC_UNUSED GPluginPlugin *plugin, G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(exact2)
diff --git a/gplugin/tests/versioned-dependencies/fez.c b/gplugin/tests/versioned-dependencies/fez.c
--- a/gplugin/tests/versioned-dependencies/fez.c
+++ b/gplugin/tests/versioned-dependencies/fez.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+fez_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format off */
 	return gplugin_plugin_info_new(
@@ -30,18 +30,16 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
-	G_GNUC_UNUSED GError **error)
+static gboolean
+fez_load(G_GNUC_UNUSED GPluginPlugin *plugin, G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
-	G_GNUC_UNUSED GError **error)
+static gboolean
+fez_unload(G_GNUC_UNUSED GPluginPlugin *plugin, G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(fez)
diff --git a/gplugin/tests/versioned-dependencies/greater-equal.c b/gplugin/tests/versioned-dependencies/greater-equal.c
--- a/gplugin/tests/versioned-dependencies/greater-equal.c
+++ b/gplugin/tests/versioned-dependencies/greater-equal.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+greater_equal_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format off */
 	return gplugin_plugin_info_new(
@@ -30,18 +30,20 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+greater_equal_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+greater_equal_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(greater_equal)
diff --git a/gplugin/tests/versioned-dependencies/greater.c b/gplugin/tests/versioned-dependencies/greater.c
--- a/gplugin/tests/versioned-dependencies/greater.c
+++ b/gplugin/tests/versioned-dependencies/greater.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+greater_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format off */
 	return gplugin_plugin_info_new(
@@ -30,18 +30,18 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+greater_load(G_GNUC_UNUSED GPluginPlugin *plugin, G_GNUC_UNUSED GError **error)
+{
+	return TRUE;
+}
+
+static gboolean
+greater_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
-	G_GNUC_UNUSED GError **error)
-{
-	return TRUE;
-}
+GPLUGIN_NATIVE_PLUGIN_DECLARE(greater)
diff --git a/gplugin/tests/versioned-dependencies/less-equal.c b/gplugin/tests/versioned-dependencies/less-equal.c
--- a/gplugin/tests/versioned-dependencies/less-equal.c
+++ b/gplugin/tests/versioned-dependencies/less-equal.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+less_equal_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format off */
 	return gplugin_plugin_info_new(
@@ -30,18 +30,20 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+less_equal_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+less_equal_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(less_equal)
diff --git a/gplugin/tests/versioned-dependencies/less.c b/gplugin/tests/versioned-dependencies/less.c
--- a/gplugin/tests/versioned-dependencies/less.c
+++ b/gplugin/tests/versioned-dependencies/less.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+less_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format off */
 	return gplugin_plugin_info_new(
@@ -30,18 +30,16 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
-	G_GNUC_UNUSED GError **error)
+static gboolean
+less_load(G_GNUC_UNUSED GPluginPlugin *plugin, G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
-	G_GNUC_UNUSED GError **error)
+static gboolean
+less_unload(G_GNUC_UNUSED GPluginPlugin *plugin, G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(less)
diff --git a/gplugin/tests/versioned-dependencies/no-version.c b/gplugin/tests/versioned-dependencies/no-version.c
--- a/gplugin/tests/versioned-dependencies/no-version.c
+++ b/gplugin/tests/versioned-dependencies/no-version.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,24 +18,26 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+no_version_query(G_GNUC_UNUSED GError **error)
 {
 	return gplugin_plugin_info_new("gplugin/test-no-version", 0x04030201, NULL);
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+no_version_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+no_version_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(no_version)
diff --git a/gplugin/tests/versioned-dependencies/super-dependent.c b/gplugin/tests/versioned-dependencies/super-dependent.c
--- a/gplugin/tests/versioned-dependencies/super-dependent.c
+++ b/gplugin/tests/versioned-dependencies/super-dependent.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2020 Gary Kramlich <grim@reaperworld.com>
+ * Copyright (C) 2011-2021 Gary Kramlich <grim@reaperworld.com>
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -18,8 +18,8 @@
 #include <gplugin.h>
 #include <gplugin-native.h>
 
-G_MODULE_EXPORT GPluginPluginInfo *
-gplugin_query(G_GNUC_UNUSED GError **error)
+static GPluginPluginInfo *
+super_dependent_query(G_GNUC_UNUSED GError **error)
 {
 	/* clang-format-11 formats this correctly, so this can be removed then. */
 	/* clang-format off */
@@ -47,18 +47,20 @@
 	/* clang-format on */
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_load(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+super_dependent_load(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
 
-G_MODULE_EXPORT gboolean
-gplugin_unload(
-	G_GNUC_UNUSED GPluginNativePlugin *plugin,
+static gboolean
+super_dependent_unload(
+	G_GNUC_UNUSED GPluginPlugin *plugin,
 	G_GNUC_UNUSED GError **error)
 {
 	return TRUE;
 }
+
+GPLUGIN_NATIVE_PLUGIN_DECLARE(super_dependent)
