Autor Wątek: VisualC++ 2008, SDL i dystrybucja aplikacji  (Przeczytany 2353 razy)

Offline Cadious

  • Użytkownik

# Maj 24, 2009, 01:30:32
Witam, napisałem prostą aplikację korzystającą z SDL. Wszystko ładnie się skompilowało w wersji debug i program działał jak należy więc postanowiłem go jeszcze przetestować na innym komputerze. Zmieniłem tryb kompilacji na release i skompilowałem projekt. Zadowolony, że wszystko tak łatwo poszło skopiowałem do folderu z plikiem exe potrzebne pliki dll od SDLa i od Visuala oraz plik manifest (czyli standardowa procedura dystrybucji programów napisanych w Visualu). Uruchomiłem wirtualną maszynę skopiowałem folder Release z programem i uruchomiłem plik exe. Zamiast okna aplikacji pojawił się komunikat: “This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.”. Poszperałem trochę w Internecie, ale niestety nie znalazłem, odpowiedzi jak zmusić program do działania. Może ktoś z was już wcześniej spotkał się z tym problemem i zna jakieś rozwiązanie tego problemu.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych


Offline lastseeds

  • Użytkownik

# Maj 24, 2009, 01:40:39
chodzi o opcje multi threaded itp nie pamietam co tam sie ustawialo ale o to chodzi :P

Offline Cadious

  • Użytkownik

# Maj 24, 2009, 01:40:53
http://wiki.warsztat.gd/Dystrybucja_aplikacji_napisanych_w_Visual_CPP_2005_EE
Przecież napisałem, że dodałem pliki dll i plik manifest. Problem leży gdzieś po stronie konfiguracji visuala.

Offline Esidar

  • Użytkownik

# Maj 24, 2009, 02:27:26
Przejrzyj plik .exe, na końcu powinien być dołączony manifest a w nim wersja DLL'ek które są wymagane. Coś w stylu
name="Microsoft.VC80.CRT" version="8.0.50727.762"

i zobacz czy dołączasz właśnie tą wersję.

Raz mi się zdarzyło na jakiejś wersji VSEE że w katalogu redist była inna wersja niż ta którą robił kompilator.

Ew. przełącz biblioteki "multithreaded DLL" na ""multithreaded".

Żeby się upewnić: oczywiście wiesz że do katalogu z plikiem .exe nie kopiuje się pojedyńczych plików dll ale cały katalog włącznie z katalogiem ? :)
+ <gra>
  + Microsoft.VC80.CRT
  - gra.exe
W samym katalogu z .exe nie powinno być żadnych dll z MSVC. Opis na wiki (link podał _MtZ) jest błędny i nie działa na każdym systemie.


« Ostatnia zmiana: Maj 24, 2009, 02:31:30 wysłana przez Esidar »

Offline Cadious

  • Użytkownik

# Maj 24, 2009, 11:08:54
Cytuj
Przejrzyj plik .exe, na końcu powinien być dołączony manifest a w nim wersja DLL'ek które są wymagane. Coś w stylu
Ciekawe, że  program potrzebuje aż 2 różnych dll'i:
name='Microsoft.VC90.CRT' version='9.0.21022.8'
name='Microsoft.VC80.CRT' version='8.0.50727.762'
Sprawdziłem też banalnego hello worlda czy też potrzebuje 2 wersji i się okazuje, że nie. Potrzebuje jedynie tej pierwszej. Postaram się wyszukać gdzieś na necie brakujących dll'ek i sprawdzę czy teraz to zadziała.

Cytuj
Ew. przełącz biblioteki "multithreaded DLL" na ""multithreaded".
Próbowałem sposobu opisanego na Gamedev.net ale niestety nie zadziałał.

Cytuj
Żeby się upewnić: oczywiście wiesz że do katalogu z plikiem .exe nie kopiuje się pojedynczych plików dll ale cały katalog włącznie z katalogiem ?
A nie trzeba też dodawać pliku manifest wygenerowanego podczas kompilacji? Czy to nie powinno wyglądać mniej więcej tak:
- Microsoft.VC90.CRT
                 - Microsoft.VC90.CRT.manifest
                 - msvcm90.dll
                 - msvcp90.dll
                 - msvcr90.dll
- hello.exe
- hello.exe.manifest

Offline Esidar

  • Użytkownik

# Maj 24, 2009, 14:57:50
Ciekawe, że  program potrzebuje aż 2 różnych dll'i:
name='Microsoft.VC90.CRT' version='9.0.21022.8'
name='Microsoft.VC80.CRT' version='8.0.50727.762'
Używasz gotowej biblioteki ? Jakiś lib stworzony przez kogoś innego w innym kompilatorze ? 9.0 jest z VS2008 a 8.0 z VS2005.

A nie trzeba też dodawać pliku manifest wygenerowanego podczas kompilacji?
Jeżeli masz w pliku .exe dołączony manifest (a pewnie masz) to nie jest potrzebny osobny plik.

Offline Cadious

  • Użytkownik

# Maj 24, 2009, 16:56:28
Cytuj
Używasz gotowej biblioteki ? Jakiś lib stworzony przez kogoś innego w innym kompilatorze ? 9.0 jest z VS2008 a 8.0 z VS2005.
Tak, korzystam z SDL 1.2.13. Teraz właśnie spojrzałem i jest on przeznaczony dla Visuala 2005. Myślałem, że jest on w pełni kompatybilny z również z Visualem 2008.

EDIT 28/05/2009

W końcu miałem trochę czasu i zamiast dalej kombinować z dllami postanowiłem stworzyć prosty projekt od podstaw i się okazało, że wszystko działa normalnie. Pewnie miałem coś pokopane w ustawieniach tamtego projektu. W każdym bądź razie dzięki za poświęcony czas.
« Ostatnia zmiana: Maj 28, 2009, 20:29:12 wysłana przez Cadious »