Я прочитал аргументы с обеих сторон о том, следует ли статически или динамически ссылаться на библиотеку времени выполнения C в проектах Visual Studio, и я все еще не совсем уверен, что думать.Должен ли я статически или динамически ссылаться на среду Visual Studio C?
Мой проект подключается к некоторым сторонним библиотекам (Python, HDF5, Trilinos и Microsoft MPI), каждый из которых должен быть построен с той же библиотекой времени исполнения, что и мой окончательный исполняемый файл (иначе они не могут быть связаны друг с другом). При связывании статически каждая из этих библиотек будет содержать копию среды выполнения C. Я читал, что это может вызвать проблемы, потому что окончательный исполняемый файл будет содержать несколько копий среды выполнения, ни одна из которых не может взаимодействовать друг с другом. Но не будет ли компоновщик жаловаться, если бы одни и те же символы были размножены?
Я хотел бы избежать «DLL Hell», но я беспокоюсь о коварных ошибках, которые могут возникнуть в результате статической привязки в нескольких экземплярах среды выполнения. Я что-то читаю неправильно?
Кроме того, я использую Visual Studio 2005, и я прочитал, что среда выполнения пакета обновления 1 не поддерживает обратную совместимость. Означает ли это, что приложение, построенное без SP1, не будет запущено на машине с пакетом SP1, даже если они имеют одинаковое имя (например, msvcr80.dll)?
Это ответ, который я искал. Кажется, что частные сборки - самое безопасное решение моей проблемы. Напомните мне пакеты Mac, в которых приложение распространяется в фиксированной структуре каталогов. Благодаря! – user76293
Но частные сборки не будут исправлены Windows Update, правильно? Таким образом, вам нужно будет сохранить свою копию библиотеки времени выполнения в актуальном состоянии самостоятельно. См. Также http://blogs.msdn.com/larryosterman/archive/2004/04/29/123090.aspx –
Я никогда не получал эти частные сборки, если моя папка «Приложение» (My App) содержит сочетание 32-разрядных и 64-битные приложения. Вы не можете просто добавить что-то вроде x32 или x64 в имя папки сборки, а это значит, что вы можете использовать только частные сборки, если у вас есть только 32-разрядные или только 64-разрядные приложения. – Patrick