Я потерян здесь, и я понятия не имею, как поступить. Это не вопрос о том, как заставить мою программу работать, это вопрос о том, как перестать тратить мое время.
Моя среда программирования — Visual Studio 2013 для Windows, в C ++.
Я широко использую 3 библиотеки, а именно: boost (используя динамическое связывание), OpenCV и Qt.
Во время разработки я настроил VS для просмотра этих 3 библиотек по умолчанию для include и .lib. Я также добавил 3 папки, содержащие все dll, в переменную окружения PATH.
Это работает, но иногда бывает больно, позвольте мне объяснить вам, когда.
Первая неприятность: всякий раз, когда у меня появляется ошибка LNK, говорящая, что я пропускаю функцию, она обычно используется в OpenCV, поскольку содержит только один включаемый файл, ссылающийся на все функции. Мне нужно взглянуть на исходный код OpenCV, чтобы увидеть, к какому модулю принадлежит эта функция, и узнать, к чему я должен привязать свою программу.
Вторая неприятность: Когда приходит время развернуть мое приложение, я должен отправить его со всеми соответствующими библиотеками. Чтобы узнать, какой из них мне нужен, я открываю средство обхода зависимостей и пытаюсь ничего не забыть. Затем мне нужно протестировать его на другом компьютере, потому что в 102% случаев я пропустил пару, а затем мне нужно настроить генератор установщика так, чтобы он включал все по одному.
Третья проблема: чтобы немного облегчить процесс настройки новой машины для разработки, я недавно переключился на NuGet. Это здорово, я добавляю повышение с парой щелчков к любому проекту. Но теперь мои буст-библиотеки везде, У меня есть одна папка на библиотеку наддува, и так как есть десятки из них, я не могу даже добавить их все сразу в мою переменную PATH, поэтому мне приходится перемещать их вручную в соответствующую папку, и это на самом деле не то, что я хочу делать с моим временем не так драгоценно, но кто ты судья
Я осмотрелся и не смог найти какой-либо хорошей практики в отношении этой проблемы, возможно, потому что они слишком очевидны или слишком специфичны для конкретной установки.
Как вы делать? Как бы вы сделали, если бы вы были мне?
Мы помещаем все наши внешние зависимости в контроль версий вместе с кодом. Это гарантирует, что весь код может собираться «из коробки» на любой из наших машин для разработки, а также гарантирует, что для любой данной версии кода мы точно знаем, какие есть зависимости.
Лучший способ проверить наличие недостающих зависимостей — это создать хороший автоматизированный набор тестов, если у вас есть всеобъемлющее сходство, то, если ваши тесты пройдены, вы должны развернуть необходимые библиотеки.
С точки зрения ссылки на соответствующие библиотеки, к сожалению, это звучит как проблема со структурой OpenCV (я не знаком с OpenCV). Я склонен использовать dumpbin под Windows и nm под Linux, чтобы легко находить символы, когда я получаю ошибки связи с незнакомой библиотекой.