CImg - это библиотека только для заголовков, и они свободно используют шаблоны, на что они ссылаются.
Если они использовали какую-то предварительно скомпилированную библиотеку (.dll / .lib / .a/.so) файл библиотеки должен содержать всю библиотеку CImg, независимо от того, какие ее биты вы на самом деле используете.
В случае статически связанной библиотеки (.lib или.a) компоновщик может затем удалить неиспользуемые символы, но это может зависеть от настроек оптимизации.
Когда вся библиотека включена в один или два заголовка, она только фактически компилируетсякогда вы #include
это, и поэтому он является частью того же процесса компиляции, что и остальная часть вашей программы, и компилятор может легко определить, какие части библиотеки используются, а какие нет.
А поскольку API CImg использует шаблоны, для функций, которые никогда не вызываются, не генерируется код.
Хотя они немного перепродали его, потому что, как указывают другие ответы, неиспользованные символы обычно удаляются в любом случае .