Visual C++ biblioteki (Redistributable Package)

0

Witam,
Piszę program dla kolegi, nie miałem dużego wyboru technologii, ponieważ kolega nie potrafi/nie chce instalować żadnych frameworków czy bibliotek. Piszę w C i WinAPI przy pomocy Visual C++.

Miałem kiedyś Windowsa i programy w Visual C++ działały bez instalacji Microsoft Visual C++ Redistributable Package (możliwe, że jakiś program mi to zainstalował automatycznie?). Kiedyś zainstalowałem czysty XP na VMware Player i nie miał tego i program w VC++ wołał o biblioteki. Więc jak to jest?

Drugie pytanie to czy jak piszę program 32-bitowy to wystarczy mieć Redistributable Package w wersji x86, nawet na systemie 64-bitowym (bo program jest 32-bitowy)?

Kolejne to moja inwencja twórcza: Zainstalować Microsoft Visual C++ Redistributable Package na Sandboxie i wyciąć te biblioteki z piaskownicy, żeby dodać do katalogu programu. Jest szansa, że zadziała? (zaraz ktoś napisze - spróbuj, hehe).

Pozdrowienia

1

Miałem kiedyś Windowsa i programy w Visual C++ działały bez instalacji Microsoft Visual C++ Redistributable Package

Za czasów Visual C++ 6.0 tak było, bo w tej wersji Visual C++ linkował standardowe runtime C właśnie do systemowo-dystrybuowanego msvcrt.dll. W kolejnych wersjach zrezygnowano z tego pomysłu i pojawiły się redistributable packages dla każdej wersji Visual Studio. Jeżeli używałeś późniejszej wersji to być może jakiś program już je zainstalował.

Drugie pytanie to czy jak piszę program 32-bitowy to wystarczy mieć Redistributable Package w wersji x86, nawet na systemie 64-bitowym (bo program jest 32-bitowy)?

Tak.

Kolejne to moja inwencja twórcza: Zainstalować Microsoft Visual C++ Redistributable Package na Sandboxie i wyciąć te biblioteki z piaskownicy, żeby dodać do katalogu programu. Jest szansa, że zadziała? (zaraz ktoś napisze - spróbuj, hehe).

Tak, zadziała. Powiedziałbym, że nawet była (i może nadal jest) to popularniejsza metoda od instalowania runtime w tle. Ma to swoje plusy i minusy, choć i tak lepsze to niż statyczne linkowanie całego runtime.

Natomiast jeżeli nie korzystasz ze standardowej biblioteki C++ (a tylko C i winapi) to jest jeszcze inna możliwość, a mianowicie linkowanie do systemowego msvcrt.dll. Plusy są takie, że 1. nie trzeba instalować żadnych runtime, 2. nie trzeba dystrybuować żadnych dodatkowych bibliotek, 3. zachowujesz małą wagę wynikowej binarki. Minus jest taki, że nie da się tego w łatwy sposób zrobić w Visual Studio. msvcrt.dll pomimo tej samej nazwy jest inne w każdym Windows. Dobra wiadomość jest taka, że toolkit z Windows Driver Kit całkiem dobrze sobie z tym radzi (linkuje np. automatycznie małe libki dla kompatybilności) i produkuje aplikacje, które działają na Windows XP, Vista, 7 i 8. Minus jest taki, że cały toolkit jest trochę przestarzały - musisz korzystać np. z lekko zmodyfikowanego kompilatora z Visual Studio 2008. Podobnego setupu używa Microsoft do budowy własnych aplikacji systemowych.
http://www.microsoft.com/en-us/download/details.aspx?id=11800

Ew. skorzystaj z MinGW, który robi podobnie.

1

Bibliotekę standardową można też statycznie linkować.
W opcjach projektu, w zakładce Code Generation ustawić Runtime Library na "Multi-threaded (/MT)" (dla kompilacji Release).

Jeśli używasz bibliotek statycznych, to wszystkie one również muszą być skompilowane z /MT (inaczej program się nie zlinkuje).
Jeśli używasz zewnętrznych DLL-ek to teoretycznie mogą być skompilowane inaczej, ale wtedy nie uzyskasz niezależność programu od zewnętrznego Runtime'u.

Statycznego runtime'u nie można też użyć jeśli program wykorzystuje .NET Framework.

1 użytkowników online, w tym zalogowanych: 0, gości: 1