Представьте DLL (Dynamic Link Library) как чемодан с инструментами для вашей программы. Как его открыть? Можно распаковать сразу при старте (неявно) или доставать инструменты по мере надобности (явно). Оба подхода решают одну задачу, но радикально отличаются в реализации и последствиях. Давайте вскроем механику! Как работает: Компоновщик (Linker) на этапе сборки связывает вашу программу с .lib-файлом (импортной библиотекой), который содержит "заглушки" для функций в DLL. При запуске программы ОС автоматически находит и загружает нужную DLL в память. // mylib.h - заголовок DLL #pragma once #ifdef MATH_EXPORTS #define MATH_API __declspec(dllexport) #else #define MATH_API __declspec(dllimport) #endif extern "C" MATH_API int add(int a, int b); // Явно указываем C-линковку // client.cpp - клиентский код #include "mylib.h" // Подключаем заголовок int main() { int result = add(5, 3); // Вызов как обычной функции! return 0; } Компиляция и линковка: # Сборка DLL: g++ -shared