Обратите внимание, что вы имеете дело с тремя этапами создания исполняемого файла.Во время компиляции вы создаете объектные файлы (.lib / .a - это просто архивы объектных файлов).После того, как эти файлы созданы, вы используете компоновщик, чтобы собрать все части вместе.При работе с динамическими библиотеками (.dll, .so) есть дополнительный шаг загрузки библиотеки, когда программа запускается / во время выполнения.
Во время компиляции компилятору нужно только знать, кто вы.используя, это не волнует, если это реализовано.Это где файлы интерфейса D входят и являются своего рода эквивалентными заголовочными файлами в этом отношении.Перечисления объявляются в файле интерфейса D и также должны быть определены, поскольку они существуют только во время компиляции.Функции и переменные могут быть объявлены без тела.
int myFunction(char* str);
Руководство по преобразованию файла заголовка в D находится на странице, на которую вы ссылаетесь.Затем эти файлы могут быть переданы компилятору или существовать во включенном пути.
Когда компоновщик запускается, когда вам нужен файл .lib / .a.Эти файлы могут быть переданы компилятору, который перенаправит их компоновщику, или вы можете использовать прагму (lib, "my.lib");в вашей программе.В обоих случаях компоновщик должен быть в состоянии найти его во время компиляции (компиляция).
В Linux я не верю, что существует разница между динамическими и статическими связями.В Windows вам даже не нужен файл интерфейса D.Вместо этого вы должны получить функцию через системные вызовы.Я действительно не очень знаком с этой областью, но я предлагаю Загрузка плагинов (DLL) на лету
Обновление: я не могу помочь с VisualD, но есть D для программистов .NET .