Статическое или динамическое подключение CRT, MFC, ATL, и т.д.

Создание каталога с помощью Android Studio не всегда работает. Возможно, вам придется создать каталог вручную в структуре каталогов (в / app / sampledata /) без использования Android Studio. Как только вы создадите его (например, через Windows Explorer), он должен появиться в Android Studio. См. Следующий ответ для получения дополнительной информации о примерах данных в целом: Как разместить новые ресурсы-заполнители в проекте Android Studio («инструменты: образец» ресурсов)?

«В отличие от таких ресурсов, как изображения, шрифты и т. д. Образцы данных не помещаются в / res / (следовательно, они не компилируются с приложением, следовательно. Вероятно, легче отфильтровать их, поместив в совершенно отдельный каталог). Они находятся в / app / sampledata /, например: /app/sampledata/image.png."

20
задан Rob 26 October 2008 в 19:06
поделиться

7 ответов

Существуют некоторые оборотные стороны:

  • Больший exe размер (особенно, если Вы поставляете несколько exe's)
  • проблемы с помощью другого DLL, которые полагаются или принимают динамическое подключение (например: третья сторона DLL, который Вы не можете получить как статические библиотеки)
  • Различное c-время-выполнения между DLL с независимой статической связью (никакой перекрестный модуль выделяют/освобождают)
  • Никакое автоматическое обслуживание совместно используемых компонентов (никакая способность сделать, чтобы сторонний поставщик модуля обновил их код для устранения проблем, не перекомпилировав и обновляя приложение)

, Мы делаем статическое подключение для наших Приложений Windows, прежде всего, потому что это позволяет развертывание xcopy, которое просто не возможно с установкой или доверием SxS DLL способом, который работает, начиная с процесса и механизма не хорошо документируется или не легко доступен удаленно. При использовании локального DLL в каталоге установки, он будет вид работы, но он не хорошо поддерживается. Неспособность легко сделать удаленная установка, не проходя MSI в удаленной системе является основной причиной, почему мы не используем динамическое подключение, но (как Вы указали) существует много других преимуществ для статического подключения. Существуют за и против каждому; надо надеяться, это помогает перечислить их.

18
ответ дан 29 November 2019 в 23:27
поделиться

Одна хорошая функция использования dll's - то, что, если несколько процессов загружает тот же dll, его код может быть совместно использован ими. Это может сохранить память и сократить загружающиеся времена для приложения, загружающего dll, это уже используется другой программой.

2
ответ дан 29 November 2019 в 23:27
поделиться

Нет, ничто нового на той передней стороне. Сохраните это тем путем.

1
ответ дан 29 November 2019 в 23:27
поделиться

Пока Вы сохраняете свое использование ограниченным определенными библиотеками и не используете dll's затем, необходимо быть хорошими.

, К сожалению, существуют некоторые библиотеки, которые Вы не можете связать статически. Лучшим примером, который я имею, является OpenMP. При использовании в своих интересах поддержки OpenMP Visual Studio необходимо будет удостовериться, что время выполнения установлено (в этом случае vcomp.dll).

при использовании dll's затем, Вы не можете передать некоторые объекты назад и вперед без некоторой серьезной гимнастики. станд.:: строки приходят на ум. Если Ваш exe и dll динамично связаны затем, выделение происходит в в CRT. Иначе Ваша программа может попытаться выделить строку на одной стороне и освободить ее на другом. Следуют плохие вещи...

Тем не менее я все еще статически связываю свой exe's и dll's. Это действительно уменьшает много variablilty в установке, и я считаю это стоимостью в несколько ограничений.

4
ответ дан 29 November 2019 в 23:27
поделиться

Совершенно определенно.

Выделение сделано на 'статической' "куче". Начиная с выделения освобождение должно быть сделано на той же "куче", это означает, что при поставке библиотеки необходимо заботиться, что клиентский код не может назвать 'Ваш' p = new LibClass() и удалить тот объект сам с помощью delete p;.

Мое заключение: или выделение щита и освобождение из клиентского кода, или динамично связывают CRT.

1
ответ дан 29 November 2019 в 23:27
поделиться

Большинство ответов, которые я слышу об этом, связало совместное использование Вашего dll's с другими программами, или наличие их dll's быть обновленным без потребности исправить Ваше программное обеспечение.

откровенно я полагаю, что это оборотные стороны, не позитивные аспекты. Когда третье лицо dll обновляется, это может измениться достаточно для повреждения программного обеспечения. И в эти дни, пространство на жестком диске не так драгоценно, как это однажды было, дополнительный 500k в Вашем исполняемом файле?Какая разница?

  • Являющийся 100%, уверенными в версии dll, который использует Ваше программное обеспечение, хорошая вещь.
  • Являющийся 100%, уверенными, то, что клиент не собирается страдать от головной боли зависимости, является хорошей вещью.

позитивные аспекты явно перевешивают оборотные стороны, по-моему

20
ответ дан 29 November 2019 в 23:27
поделиться

Есть некоторые лицензии на программы, такие как LGPL, которые требуют, чтобы вы либо использовали DLL, либо распространяли свое приложение в виде объектных файлов, которые пользователь может соединить вместе. Если вы используете такую библиотеку, вы, вероятно, захотите использовать ее как DLL.

1
ответ дан 29 November 2019 в 23:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: