compilers: Link D runtime/libphobs dynamically on !Windows

Fixes: #6786
diff --git a/mesonbuild/compilers/compilers.py b/mesonbuild/compilers/compilers.py
index e13256e..a0d752c 100644
--- a/mesonbuild/compilers/compilers.py
+++ b/mesonbuild/compilers/compilers.py
@@ -842,7 +842,7 @@
         """
         return self.linker.get_accepts_rsp()
 
-    def get_linker_always_args(self):
+    def get_linker_always_args(self) -> T.List[str]:
         return self.linker.get_always_args()
 
     def get_linker_lib_prefix(self):
diff --git a/mesonbuild/compilers/d.py b/mesonbuild/compilers/d.py
index eb3a0f3..a86f254 100644
--- a/mesonbuild/compilers/d.py
+++ b/mesonbuild/compilers/d.py
@@ -678,6 +678,12 @@
     def get_allow_undefined_link_args(self) -> T.List[str]:
         return self.linker.get_allow_undefined_args()
 
+    def get_linker_always_args(self) -> T.List[str]:
+        args = super().get_linker_always_args()
+        if self.info.is_windows():
+            return args
+        return args + ['-shared-libphobos']
+
 
 class LLVMDCompiler(DmdLikeCompilerMixin, DCompiler):
 
@@ -721,6 +727,12 @@
     def use_linker_args(cls, linker: str) -> T.List[str]:
         return ['-linker={}'.format(linker)]
 
+    def get_linker_always_args(self) -> T.List[str]:
+        args = super().get_linker_always_args()
+        if self.info.is_windows():
+            return args
+        return args + ['-link-defaultlib-shared']
+
 
 class DmdDCompiler(DmdLikeCompilerMixin, DCompiler):
 
@@ -785,3 +797,9 @@
 
     def can_linker_accept_rsp(self) -> bool:
         return False
+
+    def get_linker_always_args(self) -> T.List[str]:
+        args = super().get_linker_always_args()
+        if self.info.is_windows():
+            return args
+        return args + ['-defaultlib=phobos2', '-debuglib=phobos2']