diff --git a/gio/tests/giomodule.c b/gio/tests/giomodule.c
index e832e95d37b6c19c9a7fce2adbc6eb47aced4256..893357110e0d74e94fd7f40b5f3172964b545daa 100644
--- a/gio/tests/giomodule.c
+++ b/gio/tests/giomodule.c
@@ -76,51 +76,57 @@ test_extension_point (void)
 static void
 test_module_scan_all (void)
 {
-  if (g_test_subprocess ())
+  if (g_module_supported ())
     {
-      GIOExtensionPoint *ep;
-      GIOExtension *ext;
-      GList *list;
-      ep = g_io_extension_point_register ("test-extension-point");
-      g_io_modules_scan_all_in_directory (g_test_get_filename (G_TEST_BUILT, "modules", NULL));
-      g_io_modules_scan_all_in_directory (g_test_get_filename (G_TEST_BUILT, "modules/.libs", NULL));
-      list = g_io_extension_point_get_extensions (ep);
-      g_assert_cmpint (g_list_length (list), ==, 2);
-      ext = list->data;
-      g_assert_cmpstr (g_io_extension_get_name (ext), ==, "test-b");
-      ext = list->next->data;
-      g_assert_cmpstr (g_io_extension_get_name (ext), ==, "test-a");
-      return;
+      if (g_test_subprocess ())
+        {
+          GIOExtensionPoint *ep;
+          GIOExtension *ext;
+          GList *list;
+          ep = g_io_extension_point_register ("test-extension-point");
+          g_io_modules_scan_all_in_directory (g_test_get_filename (G_TEST_BUILT, "modules", NULL));
+          g_io_modules_scan_all_in_directory (g_test_get_filename (G_TEST_BUILT, "modules/.libs", NULL));
+          list = g_io_extension_point_get_extensions (ep);
+          g_assert_cmpint (g_list_length (list), ==, 2);
+          ext = list->data;
+          g_assert_cmpstr (g_io_extension_get_name (ext), ==, "test-b");
+          ext = list->next->data;
+          g_assert_cmpstr (g_io_extension_get_name (ext), ==, "test-a");
+          return;
+        }
+      g_test_trap_subprocess (NULL, 0, 7);
+      g_test_trap_assert_passed ();
     }
-  g_test_trap_subprocess (NULL, 0, 7);
-  g_test_trap_assert_passed ();
 }
 
 static void
 test_module_scan_all_with_scope (void)
 {
-  if (g_test_subprocess ())
+  if (g_module_supported ())
     {
-      GIOExtensionPoint *ep;
-      GIOModuleScope *scope;
-      GIOExtension *ext;
-      GList *list;
+      if (g_test_subprocess ())
+        {
+          GIOExtensionPoint *ep;
+          GIOModuleScope *scope;
+          GIOExtension *ext;
+          GList *list;
 
-      ep = g_io_extension_point_register ("test-extension-point");
-      scope = g_io_module_scope_new (G_IO_MODULE_SCOPE_BLOCK_DUPLICATES);
-      g_io_module_scope_block (scope, "libtestmoduleb." G_MODULE_SUFFIX);
-      g_io_modules_scan_all_in_directory_with_scope (g_test_get_filename (G_TEST_BUILT, "modules", NULL), scope);
-      list = g_io_extension_point_get_extensions (ep);
-      g_io_modules_scan_all_in_directory_with_scope (g_test_get_filename (G_TEST_BUILT, "modules/.libs", NULL), scope);
-      list = g_io_extension_point_get_extensions (ep);
-      g_assert_cmpint (g_list_length (list), ==, 1);
-      ext = list->data;
-      g_assert_cmpstr (g_io_extension_get_name (ext), ==, "test-a");
-      g_io_module_scope_free (scope);
-      return;
+          ep = g_io_extension_point_register ("test-extension-point");
+          scope = g_io_module_scope_new (G_IO_MODULE_SCOPE_BLOCK_DUPLICATES);
+          g_io_module_scope_block (scope, "libtestmoduleb." G_MODULE_SUFFIX);
+          g_io_modules_scan_all_in_directory_with_scope (g_test_get_filename (G_TEST_BUILT, "modules", NULL), scope);
+          list = g_io_extension_point_get_extensions (ep);
+          g_io_modules_scan_all_in_directory_with_scope (g_test_get_filename (G_TEST_BUILT, "modules/.libs", NULL), scope);
+          list = g_io_extension_point_get_extensions (ep);
+          g_assert_cmpint (g_list_length (list), ==, 1);
+          ext = list->data;
+          g_assert_cmpstr (g_io_extension_get_name (ext), ==, "test-a");
+          g_io_module_scope_free (scope);
+          return;
+        }
+      g_test_trap_subprocess (NULL, 0, 7);
+      g_test_trap_assert_passed ();
     }
-  g_test_trap_subprocess (NULL, 0, 7);
-  g_test_trap_assert_passed ();
 }
 
 int
diff --git a/gmodule/meson.build b/gmodule/meson.build
index e4a6a1c811c97ea32e27c79a766dd31205e7789b..77ffdc476a631eed8403a88b08006e6fb4b16494 100644
--- a/gmodule/meson.build
+++ b/gmodule/meson.build
@@ -8,7 +8,8 @@ libdl_dep = [ ]
 g_module_lib_args = [ ]
 g_module_impl = ''
 
-dlopen_dlsym_test_code = '''
+if get_option('default_library') != 'static'
+  dlopen_dlsym_test_code = '''
 #include <dlfcn.h>
 int glib_underscore_test (void) { return 42; }
 int main (int argc, char ** argv) {
@@ -21,48 +22,49 @@ int main (int argc, char ** argv) {
   return (!f2 || f1);
 }'''
 
-# On Windows force native WIN32 shared lib loader
-if host_system == 'windows'
-  g_module_impl = 'G_MODULE_IMPL_WIN32'
-# Force native AIX library loader
-# dlopen() filepath must be of the form /path/libname.a(libname.so)
-elif host_system == 'aix'
-  g_module_impl = 'G_MODULE_IMPL_AR'
-elif cc.links(dlopen_dlsym_test_code, name : 'dlopen() and dlsym() in system libraries')
-  g_module_impl = 'G_MODULE_IMPL_DL'
-# NSLinkModule (dyld) in system libraries (Darwin)
-elif cc.has_function('NSLinkModule')
-  g_module_impl = 'G_MODULE_IMPL_DYLD'
-  g_module_need_uscore = 1
-elif cc.links(dlopen_dlsym_test_code, args : '-ldl', name : 'dlopen() and dlsym() in libdl')
-  g_module_impl = 'G_MODULE_IMPL_DL'
-  libdl_dep = cc.find_library('dl')
-  g_module_lib_args = '-ldl'
-endif
+  # On Windows force native WIN32 shared lib loader
+  if host_system == 'windows'
+    g_module_impl = 'G_MODULE_IMPL_WIN32'
+  # Force native AIX library loader
+  # dlopen() filepath must be of the form /path/libname.a(libname.so)
+  elif host_system == 'aix'
+    g_module_impl = 'G_MODULE_IMPL_AR'
+  elif cc.links(dlopen_dlsym_test_code, name : 'dlopen() and dlsym() in system libraries')
+    g_module_impl = 'G_MODULE_IMPL_DL'
+  # NSLinkModule (dyld) in system libraries (Darwin)
+  elif cc.has_function('NSLinkModule')
+    g_module_impl = 'G_MODULE_IMPL_DYLD'
+    g_module_need_uscore = 1
+  elif cc.links(dlopen_dlsym_test_code, args : '-ldl', name : 'dlopen() and dlsym() in libdl')
+    g_module_impl = 'G_MODULE_IMPL_DL'
+    libdl_dep = cc.find_library('dl')
+    g_module_lib_args = '-ldl'
+  endif
 
-# additional checks for G_MODULE_IMPL_DL
-if g_module_impl == 'G_MODULE_IMPL_DL'
-  # FIXME: check for OSF1/5.0 RTLD_GLOBAL brokenness (is this still relevant?)
+  # additional checks for G_MODULE_IMPL_DL
+  if g_module_impl == 'G_MODULE_IMPL_DL'
+    # FIXME: check for OSF1/5.0 RTLD_GLOBAL brokenness (is this still relevant?)
 
-  # Check whether we need preceding underscores
-  if cc.get_id() == 'msvc'
-    message('Building for MSVC: assuming that symbols are prefixed with underscore')
-    g_module_need_uscore = 1
-  elif meson.has_exe_wrapper()
-    # FIXME: communicate result via stdout instead of return value, so non-0 return is not printed in bold red
-    rres = cc.run(dlopen_dlsym_test_code,
-                  args : g_module_lib_args,
-                  name : 'dlsym() preceding underscores')
-    if host_system == 'windows' or rres.returncode() == 0
+    # Check whether we need preceding underscores
+    if cc.get_id() == 'msvc'
+      message('Building for MSVC: assuming that symbols are prefixed with underscore')
       g_module_need_uscore = 1
+    elif meson.has_exe_wrapper()
+      # FIXME: communicate result via stdout instead of return value, so non-0 return is not printed in bold red
+      rres = cc.run(dlopen_dlsym_test_code,
+                    args : g_module_lib_args,
+                    name : 'dlsym() preceding underscores')
+      if host_system == 'windows' or rres.returncode() == 0
+        g_module_need_uscore = 1
+      endif
+    else
+      message('Cross-compiling: assuming that symbols aren\'t prefixed with underscore')
+      g_module_need_uscore = 0
     endif
-  else
-    message('Cross-compiling: assuming that symbols aren\'t prefixed with underscore')
-    g_module_need_uscore = 0
-  endif
 
-  if cc.has_function('dlerror', args : g_module_lib_args)
-    g_module_have_dlerror = 1
+    if cc.has_function('dlerror', args : g_module_lib_args)
+      g_module_have_dlerror = 1
+    endif
   endif
 endif
 
diff --git a/tests/module-test.c b/tests/module-test.c
index fbf23169f730f3ecf2f24c1071f6ee1869fdc2fe..04a12128923258fe0ab0b37e618fe89b11cb0327 100644
--- a/tests/module-test.c
+++ b/tests/module-test.c
@@ -82,7 +82,7 @@ main (int    argc,
   g_test_init (&argc, &argv, NULL);
 
   if (!g_module_supported ())
-    g_error ("dynamic modules not supported");
+    return 0;
 
   plugin_a = g_test_build_filename (G_TEST_BUILT, "libmoduletestplugin_a", NULL);
   plugin_b = g_test_build_filename (G_TEST_BUILT, "libmoduletestplugin_b", NULL);