diff --git a/test/unit/CMakeLists.txt b/test/unit/CMakeLists.txt
index dfda9efc50ffd91fee5daa2626f41dec0b25a53f..b2474313344aa152b684188db00b5829878cf481 100644
--- a/test/unit/CMakeLists.txt
+++ b/test/unit/CMakeLists.txt
@@ -174,16 +174,6 @@ set(unit_sources
     unit_test_catalogue.cpp
 )
 
-
-# for unit testing
-make_catalogue(
-  NAME dummy
-  SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/dummy"
-  OUTPUT "CAT_DUMMY_SOURCES"
-  MECHS dummy
-  ARBOR "${PROJECT_SOURCE_DIR}"
-  STANDALONE ON)
-
 if(ARB_WITH_GPU)
     list(APPEND unit_sources
         test_intrin.cu
@@ -215,7 +205,18 @@ endif()
 add_executable(unit EXCLUDE_FROM_ALL ${unit_sources} ${test_mech_sources})
 add_dependencies(unit build_test_mods)
 add_dependencies(tests unit)
-add_dependencies(unit dummy-catalogue)
+
+if(${CMAKE_POSITION_INDEPENDENT_CODE})
+  make_catalogue(
+    NAME dummy
+    SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/dummy"
+    OUTPUT "CAT_DUMMY_SOURCES"
+    MECHS dummy
+    ARBOR "${PROJECT_SOURCE_DIR}"
+    STANDALONE ON)
+  target_compile_definitions(unit PRIVATE USE_DYNAMIC_CATALOGUES)
+  add_dependencies(unit dummy-catalogue)
+endif()
 
 if(ARB_WITH_NVCC)
     target_compile_options(unit PRIVATE -DARB_CUDA)
diff --git a/test/unit/test_mechcat.cpp b/test/unit/test_mechcat.cpp
index 2b6b1a6465f0ac85559e8c809ed3be3daa19e51d..2809b31d8342230ee249f5004cd300a4484f9556 100644
--- a/test/unit/test_mechcat.cpp
+++ b/test/unit/test_mechcat.cpp
@@ -291,6 +291,7 @@ TEST(mechcat, names) {
     }
 }
 
+#ifdef USE_DYNAMIC_CATALOGUES
 TEST(mechcat, loading) {
     EXPECT_THROW(load_catalogue(LIBDIR "/does-not-exist-catalogue.so"), file_not_found_error);
     EXPECT_THROW(load_catalogue(LIBDIR "/libarbor.a"), bad_catalogue_error);
@@ -298,7 +299,9 @@ TEST(mechcat, loading) {
     EXPECT_NO_THROW(cat = &load_catalogue(LIBDIR "/dummy-catalogue.so"));
     ASSERT_NE(cat, nullptr);
     EXPECT_EQ(std::vector<std::string>{"dummy"}, cat->mechanism_names());
+
 }
+#endif
 
 TEST(mechcat, derived_info) {
     auto cat = build_fake_catalogue();