Я читаю это руководство он проведет вас через шаги, необходимые для создания «визуального» приложения с Cairo и Visual C ++. Руководство предлагает вам загрузить определенные DLL-файлы и сохранить их в каталоге, в котором создается ваш исполняемый файл (отладка).
Вот список файлов, на которые ссылается Нил в своем уроке:
Как видите, файлов довольно много. Мне было интересно, если это «правильный» способ сделать это? Есть ли альтернативный способ, который считается «наилучшей практикой» в этом случае?
В этом подходе нет ничего плохого, и, возможно, это самый быстрый способ запустить ваше приложение. Вашему приложению нужны эти библиотеки, поэтому размещение их в одной папке позволяет найти их.
Конечно, всегда есть альтернативы!
Статическое связывание
Чтобы избежать наличия библиотеки dll, которая должна существовать в вашем приложении, вы можете использовать статическое связывание. Вы связываете файлы .lib во время компоновки, а не ссылки на файлы .dll во время выполнения. Делает ваш .exe больше, но это означает, что вы можете распространять один файл.
Помещение Dlls в другую папку
DLL-файлы не обязательно должны находиться в той же папке, что и .exe, хотя обычно это имеет смысл. Windows будет искать несколько папок при поиске .dll во время выполнения, поэтому вы можете поместить dll в текущий каталог, системный каталог (определенно не рекомендуется) или другой каталог в вашем каталоге. PATH
переменная окружения. На самом деле ни одно из этих мест не рекомендуется! Размещение их в той же папке, что и .exe, является самым безопасным, потому что обычно у вас есть контроль над этой папкой.
Конкретные правила для того, как Windows ищет .dll изложены здесь: http://msdn.microsoft.com/en-ca/library/windows/desktop/ms682586(v=vs.85).aspx
Пользовательский шаг сборки
Я не люблю помещать файлы вручную в папки отладки или выпуска. Мне нравится думать о папке отладки как о чем-то, что я могу удалить и пересобрать в любое время, и мне нравится иметь процесс пошаговой сборки, который помещает все, где это необходимо, чтобы я мог легко собрать на любой машине. Поэтому я обычно создаю пользовательский шаг сборки, который копирует необходимые DLL-файлы из папки «source» (в управлении исходным кодом) в мою папку вывода.
Других решений пока нет …