Obecnie preferowanym przeze mnie środowiskiem C ++ jest darmowa iw dużej mierze doskonała edycja Microsoft Visual Studio 2005 Express. Od czasu do czasu wysyłałem innym osobom pliki .exe z zadowalającymi wynikami. Jednak ostatnio dokonałem niepokojącego odkrycia, że zadowalające wyniki były oparte na większym szczęściu, niż bym chciał. Próba uruchomienia jednego z tych programów na starym (rocznik 2001, nie skrupulatnie aktualizowanym) pudełku XP dała mi tylko nieprzyjemny komunikat „System nie może uruchomić x.exe” (lub podobny).
Niektórzy googlowie ujawnili, że w przypadku tego zestawu narzędzi, nawet określenie statycznego linku powoduje, że prosty plik hello-world.exe faktycznie polega na dodatkowych plikach .dll (msvcm80.dll itp.). Niezwykle rozbudowany system schematów wersji (czy ktoś manifestuje pliki?) Nie pozwoli więc na uruchomienie .exe bez dokładnie odpowiednich wersji .dll. Nie chcę ani nie potrzebuję tych rzeczy, po prostu chcę staromodnego, samodzielnego pliku .exe, który wykonuje tylko operacje Win32 z najniższym wspólnym mianownikiem i działa na każdym starym systemie operacyjnym win32.
Czy ktoś wie, czy można zrobić to, co chcę zrobić z moim istniejącym zestawem narzędzi?
Dziękuję Ci.
źródło
error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MT_StaticRelease'
. Czy jest inne miejsce, w którym można zmienić typ kompilacji? Buduję aplikację wxWigets, podobnie jak @BillForster. Czy będę musiał przebudować wxWidgets? W jaki sposób mogę to zrobić?Z mojego doświadczenia w Visual Studio 2010 wynika, że potrzebne są dwie zmiany, aby nie potrzebować bibliotek DLL. Na stronie właściwości projektu (kliknij prawym przyciskiem myszy nazwę projektu w oknie Solution Explorer):
W obszarze Właściwości konfiguracji -> Ogólne zmień wartość w polu „Użyj MFC” na „Użyj MFC w bibliotece statycznej”.
W obszarze Właściwości konfiguracji -> C / C ++ -> Generowanie kodu zmień pole „Biblioteka środowiska wykonawczego” na „Wielowątkowy (/ MT)”
Nie wiem, dlaczego oba były potrzebne. Użyłem tego do usunięcia zależności od glut32.dll.
Dodano później: wprowadzając te zmiany w konfiguracjach, należy ustawić je na „Wszystkie konfiguracje” - można to wybrać u góry okna Właściwości. Jeśli wprowadzisz zmianę tylko w konfiguracji debugowania, nie będzie ona miała zastosowania do konfiguracji wydania i na odwrót.
źródło
Miałem ten sam problem z zależnościami i wiem również, że możesz dołączyć biblioteki DLL VS 8.0 (tylko wydanie! Nie debugowanie! --- i twój program też musi być wydany) w folderze o odpowiedniej nazwie, w folder nadrzędny z plikiem .exe:
Instrukcje: wdrażanie przy użyciu XCopy (MSDN)
Należy również pamiętać, że wszystko pójdzie nie tak, jeśli potrzebujesz kodu C ++ i C w tym samym statycznie połączonym pliku .exe, ponieważ otrzymasz konflikty konsolidatora, które można rozwiązać tylko przez zignorowanie prawidłowego libXXX.lib, a następnie dynamiczne połączenie (biblioteki DLL) .
Wreszcie, z innym zestawem narzędzi (VC ++ 6.0) rzeczy „po prostu działają”, ponieważ Windows 2000 i nowsze mają zainstalowane prawidłowe biblioteki DLL.
źródło
Jeśli chodzi o odpowiedź Jareda, posiadanie systemu Windows 2000 lub nowszego niekoniecznie rozwiąże problem. Odpowiedź Roba działa, jednak możliwe jest, że ta poprawka wprowadza problemy z bezpieczeństwem, ponieważ aktualizacje systemu Windows nie będą mogły łatać aplikacji zbudowanych jako takie.
W innym poście Nick Guerrera sugeruje pakowanie pakietu redystrybucyjnego Visual C ++ Runtime Redistributable z aplikacjami, które instalują się szybko i są niezależne od Visual Studio.
źródło