2016-05-18 28 views
5

Planuję zwolnić i wdrożyć aplikację napisaną w C++ i wxWidgets. Biblioteka wxWidgets jest dostępna zarówno w bibliotekach dll, jak i statycznych. Dlatego mam opcję wdrożenia aplikacji jako dynamicznej aplikacji zbudowanej lub statycznej.Co to jest najlepsza praktyka przy wdrażaniu aplikacji jako kompilacji statycznej lub dynamicznej?

Obecnie wolę opcję static-build, ponieważ:

  • wykonywalny nie jest zbyt duża (< 20 megabajty).
  • nie ma żadnych zależności do rozważenia.
  • nie wymaga instalacji.

Pytanie

Czy brakuje czegoś bardzo ważnego?

Odpowiedz

3

Moja sugestia dotyczy połączenia statycznego . Moje dwa centy na korzyść:

  • nie są zależne od WX zestaw narzędzi instalowanych na miejscu klienta, nie trzeba dać to w pakiecie z instalatora, nie jako samodzielny instalator jako warunków wstępnych.
  • Nie należy się spodziewać ani poprosić klienta o wykonanie instalacji WX (lub nawet wdrożenie XCOPY). Klient nie zawracał sobie głowy!
  • 20 MB jest dość małe w TB i zapewnia dobrą przepustowość Internetu.
  • Nie otrzymasz nieoczekiwanych błędów dotyczących zachowania klienta, jeśli używają wyższej/niższej wersji biblioteki.
  • Możesz mieć pewność, że aplikacja będzie działać tak samo, jak testowano w środowisku (w większości)
  • Możesz nadal używać X wersji WX, nawet jeśli pojawi się buggy/flashy w wersji X + 1. Nie chcesz, aby klient miał "nowszą i ulepszoną" wersję biblioteki, która zepsuje twoją aplikację!
1

Podczas gdy w twoim przypadku plik wykonywalny nie jest zbyt duży, może stać się bardzo duży, jeśli połączysz wszystko statycznie. Wykorzystuje również więcej pamięci, ponieważ większy plik wykonywalny musi być załadowany do pamięci.

Jeśli używasz biblioteki dynamicznej, system operacyjny może "współużytkować" pamięć tylko do odczytu między procesami, zmniejszając wymagania dotyczące pamięci.

Aktualizowanie aplikacji może być łatwiejsze dzięki bibliotece dynamicznej, ponieważ zamiast aktualizować cały plik wykonywalny, można po prostu zamienić bibliotekę dynamiczną (zakładając, że interfejs jest taki sam) i voila! To samo dotyczy, jeśli użytkownik chce zaktualizować swoją bibliotekę dynamiczną (na przykład za pośrednictwem menedżera pakietów).

4

Powinieneś używać dynamicznego linkowania, gdy istnieje dobry powód, aby go używać i statyczne łączenie w przeciwnym razie. Niektóre powody do korzystania z dynamicznego łączenia są:

  1. Ty dystrybucji plików binarnych dla systemu, który już ma lub może mieć, biblioteki wxWidgets jak wielu dystrybucji systemu Linux, OS X (z) etc. W Homebrew w tym przypadku zdecydowanie lepiej jest ponownie użyć istniejących bibliotek systemowych zamiast używać własnych.
  2. Masz kilka modułów za pomocą wxWidget: tutaj oszczędność miejsca przy użyciu dynamicznego łączenia może być dość znacząca.
  3. Używasz wxWidgets z biblioteki DLL pod MSW: w tym przypadku wxWidgets również powinno być połączone jako DLL, w przeciwnym razie możesz mieć problemy, jeśli więcej niż jedna instancja wxWidgets zostanie załadowana do przestrzeni adresowej procesu.
  4. Planujesz aktualizację instalacji aplikacji przez sieć: w takim przypadku może być miło zaktualizować tylko jedną bibliotekę DLL zamiast całej aplikacji monolitycznej.

Jeśli nie ma zastosowania żadna z tych przyczyn, np. Po prostu chcesz rozpowszechniać pojedynczy program w MSW, statyczne łączenie jest prostsze i lepsze.

Powiązana uwaga: jeśli w końcu rozprowadzasz biblioteki DLL wxWidgets, zastanów się nad użyciem unikalnego sufiksu, zamiast domyślnego "niestandardowego", zmniejszy to prawdopodobieństwo pomylenia twoich bibliotek DLL z inną wersją wx.