diff --git a/cmake/gtest_helper.cmake b/cmake/gtest_helper.cmake
index 073eb1374907a92d8383fb8c83f13febb9986715..00d555aab9077608430923c2f8338ce177b2227a 100644
--- a/cmake/gtest_helper.cmake
+++ b/cmake/gtest_helper.cmake
@@ -31,7 +31,7 @@ function(fs_add_c_test test_name)
   add_executable("CTest_${test_name}" ${ARG_SOURCES})
   target_link_libraries(
     "CTest_${test_name}" PRIVATE fortran-support::fortran-support
-                                 GTest::gtest_main stdc++fs)
+                                 GTest::gtest_main)
   add_test(NAME "CTest_${test_name}" COMMAND "CTest_${test_name}" ${ARG_ARGS})
   set_property(TEST "CTest_${test_name}" PROPERTY LABELS C)
   set_target_properties("CTest_${test_name}"
diff --git a/test/c/ctest_util_stride.cpp b/test/c/ctest_util_stride.cpp
index 1e7e6a0ef5fbb9f79cdc84993d451236f934baef..2c75e8a0e707932cff45db795ae8a07be959b6d2 100644
--- a/test/c/ctest_util_stride.cpp
+++ b/test/c/ctest_util_stride.cpp
@@ -10,7 +10,7 @@
 // ---------------------------------------------------------------
 
 #include <gtest/gtest.h>
-#include <experimental/random>
+#include <random>
 
 #include <util_stride.h>
 
@@ -47,13 +47,17 @@ TEST_F(UtilStrideTest, CanGet1DStride) {
 }
 
 TEST_F(UtilStrideTest, CanGet1DStride2) {
+    std::random_device rd;
+    std::mt19937 gen(rd());
+    std::uniform_int_distribution<int> dist(0, 499);
+
     int stride;
 
     float f_array[1000];
     double d_array[1000];
 
-    int p1 = std::experimental::randint(0, 499);
-    int p2 = std::experimental::randint(500, 999);
+    int p1 = dist(gen);
+    int p2 = 500 + dist(gen);
 
     util_stride_1d(&stride, sizeof(float), &f_array[p1], &f_array[p2]);
     EXPECT_EQ(stride, p2 - p1);
@@ -78,14 +82,18 @@ TEST_F(UtilStrideTest, CanGet2DStride) {
 }
 
 TEST_F(UtilStrideTest, CanGet2DStride2) {
+    std::random_device rd;
+    std::mt19937 gen(rd());
+    std::uniform_int_distribution<int> dist(0, 499);
+
     int stride[2];
 
     float f_array[1000];
     double d_array[1000];
 
-    int p1 = std::experimental::randint(0, 499);
-    int p2 = std::experimental::randint(500, 999);
-    int p3 = std::experimental::randint(500, 999);
+    int p1 = dist(gen);
+    int p2 = 500 + dist(gen);
+    int p3 = 500 + dist(gen);
 
     util_stride_2d(&stride[0], sizeof(float), &f_array[p1], &f_array[p2],
                    &f_array[p3]);