Autor Wątek: Problem z dystrybucją aplikacji skompilowanych w VC++ 2008  (Przeczytany 3440 razy)

Offline Control

  • Użytkownik

# Kwiecień 14, 2009, 19:53:40
Witam,
odrazu przepraszam za setny topic tego typu ale przeszukałem warsztat i googlowałem 3h i żaden z omówionych sposobów mi nie pomógł.
Na moim komputerze gra działa, wysyłam ją jednak kuzynowi który nie ma visuala na kompie i nic.
Korzystałem z tego http://wiki.warsztat.gd/Dystrybucja_aplikacji_napisanych_w_Visual_CPP_2005_EE, zmieniłem jednak nazwe Microsoft.VC80.CRT.manifest na Microsoft.VC90.CRT.manifest i zamiast plików "80" dodałem "90" do folderu z aplikacją(tak pisało na jakimś forum) kuzynowi wywala błąd:
aplikacja nie została właściwie zainicjowana (oxc0000135). Kliknij przycisk OK, aby zakonczyc aplikacjeZmieniając z kolei opcje projektu na Multi-threaded kompilator wywala mi błąd:
1>cl : Command line error D8016 : '/MT' and '/clr' command-line options are incompatiblePoleciłem kuzynowi zainstalowanie vcredist_x86 ale to też podobno nic nie daje, naprawde gdyby to nie było konieczne, nie pisałbym
Proszę o pomoc :S

Offline Mr. Spam

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

Offline Aithne

  • Użytkownik

# Kwiecień 14, 2009, 20:15:11
A .NET 3.5 to ma (wnioskuję po /clr, że używasz C++/CLI, nie C++)?

Offline Mannelig

  • Użytkownik

# Kwiecień 14, 2009, 20:53:44
A miałem zakładać właśnie topic o tym, mam ten sam bug. Czy używasz czegoś, co w jakimś stopniu korzysta z OpenGl i piszesz w C++ ??

Miałem to samo korzystając z SFMLa, który wykorzystuje  OpenGl, ponieważ zainstalowanie odpowiednich redistrów nie pomogło, zacząłem testować programy korzystające z innych bibliotek: WinApi, Direct3D, Qt i wxWidgets i czystym OpenGl (tzn. WinAPI + OGl) , co ciekawe tylko OpenGl się wysypywał, choć u mnie działał poprawnie.

Niewiedząc co począć, zacząłem kompilować program z różnymi opcjami uruchamiania MT/ MD, a także  sztuczkę z dll i manifestem, jednakże i to nie pomogło.

Zacząłem więc kombinować, przywróciłem system na wirtualnej maszynie, do stanu przed  instalacją redistrów i zainstalowałem .NET Framework 3.5, sugerowałem sie tym co jest napisane tutaj http://forum.warsztat.gd/index.php/topic,9154.msg125532.html#msg125532

Co ciekawe pomogło, wysłałem jeszcze execa do paru kumpli, żeby przetestowali i podziałało, ale nie rozumiem  dlaczego do kodu natywnego potrzebne jest  .NET FRAMEWORK, czy w jego redistrach  jest coś czego nie ma w zwykłej paczce redystrybucyjnej do VS 2008??
« Ostatnia zmiana: Kwiecień 14, 2009, 21:05:33 wysłana przez Mannelig »

Offline Aithne

  • Użytkownik

# Kwiecień 14, 2009, 21:03:28
Widocznie robicie kod C++/CLI i nawet o tym nie wiecie. Wywalić /clr, dać /MT i powinno działać.

Offline Mannelig

  • Użytkownik

# Kwiecień 14, 2009, 21:27:26
Nie wiem jak Control, ale ja z CLR w tym projekcie  nie korzystam, wyłącznie czyste c++ 


Poza tym Ilekroć na forum pada pytanie o  taki błąd inicjalizacji aplikacji, to tyle samo razy nie znajduje ono odpowiedzi….
« Ostatnia zmiana: Kwiecień 14, 2009, 21:31:45 wysłana przez Mannelig »

Offline Aithne

  • Użytkownik

# Kwiecień 14, 2009, 21:51:58
Pokaż argumenty, z jakimi wołasz kompilator (w IDE w ustawieniach projektu, C++->Command Line czy coś takiego) - coś się wymyśli.

Offline Mannelig

  • Użytkownik

# Kwiecień 15, 2009, 08:40:27
Acha zapomniałem dodać, ja nie dostaje tego komunikatu od kompilatora:
1>cl : Command line error D8016 : '/MT' and '/clr' command-line options are incompatible

Zmiany  z /MD na /MT, nie wywołują błędów na moim kompie z VS, ani podczas uruchamiania poprzez IDE ani poza nim, błąd pojawia się jedynie, na systemach bez Visual Studio 2008 lub .NET FRAMEWORK 3.5 (nie wiem jak jest z 3.0, ale z 2.0 pojawia ten sam bug), i to niezależnie od tego czy jest to runtime "statyczny" czy "dynamiczny"

Dla konfiguracji release:

/O2 /Oi /GL /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "USE_WINDOW" /D "USE_SYSTEM" /D "USE_GRAPHICS" /D "_UNICODE" /D "UNICODE" /FD /EHsc /MD /Gy /Yu"stdafx.h" /Fp"Release\Program.pch" /Fo"Release\\" /Fd"Release\vc90.pdb" /W3 /nologo /c /Zi /TP /errorReport:prompt

Gwoli ścisłości dyrektywy preprocesora   "USE_WINDOW"  "USE_SYSTEM" "USE_GRAPHICS" są deklarowane prze mnie, służą do dołączania odpowiednich modułów SFMla
Projekt korzysta teraz z Multi-threaded DLL (/MD), bo nawet w tej konfiguracji, program nie rusza, nawet z zainstalowaną paczką redystrybucyjną.

System wywala błąd w stylu:

"Aplikacja nie została właściwie zainicjowana (0xc0150002). Kliknij przycisk OK, aby zakończyć aplikację."

Żeby sprawdzić czy to faktycznie, problem z połączenia MSVC i OpenGl, przetestowałem jeszcze program z SDL  i też ten sam problem inicjowania i ponownie ratunek ze strony .NET FRAMEWORK 3.5

Podobny problem miał Dab tutaj: http://forum.warsztat.gd/index.php/topic,9154.msg122636.html#msg122636
jest jeszcze pare innych tego typu topiców,  ale tu jest o tym najwięcej, choć problem nie został tam rozwiązany (przynajmiej nie ma o tym na forum...)

Najlepiej by było, gdyby ktoś mógł przetestować, program, który tam zamieścił:
http://dabroz.scythe.pl/upload/2008/12/test-all.rar

Ale niech test odbędzie się na kompach bez VS 2008 (ani żadnego innego), i NET Framework 3.5 i najlepiej pod WinXp bo pod Vistą, był testowany przeze mnie.

Jeżeli nie będzie działał, to proszę zainstalować paczkę redystrybucyjną
http://www.microsoft.com/downloads/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=en

a i jeśli to nie pomoze, to proszę ją odinstalować i zainstalować .NET Framework 3.5

chodzi mi tylko o sprawdzenie czy się uruchamia.

I może żeby nie zaciemniać tego wątku, odpisujcie na topic Daba.

Tutaj przesyłajcie sugestie co może byc przyczyną anormalności połączenia OGL z MSVC 2008

(pod 2005 działa normalnie, sobol miał podobnie http://forum.warsztat.gd/index.php/topic,9224.msg123449.html#msg123449 )
« Ostatnia zmiana: Kwiecień 15, 2009, 08:56:05 wysłana przez Mannelig »

Offline vashpan

  • Użytkownik
    • Strona

# Kwiecień 15, 2009, 09:13:34
W paczce masz dll'ke "msvcm.dll" -> to jest bibliteka standardowa C++/CLI , m, od managed, i ona wymaga .NET Frameworka. Byc moze przez przypadek kompilujesz jedna z czesci silnika z opcja /clr i nawet o tym nie wiesz... Przejedz wszystko dependency walkerem....

Offline Mannelig

  • Użytkownik

# Kwiecień 15, 2009, 17:51:42
Depency walker, wykazał ze program nie ładuje biblioteki "msvcm.dll", tylko te standardowe runtimowe, co ciekawe nawet w programie skompilowanym z opcją /MT, ale to akurat pewnie dlatego że same biblioteki SFMLa były kompilowane z /MD,
na razie je sobie przebuduje pod /MT i zobacze co  z tego wyjdzie...

Offline Control

  • Użytkownik

# Kwiecień 15, 2009, 18:56:41
Ja nawet nie wiem co to jest C++/CLI i nigdy .NET nie używałem, a gra jest pisana w allegro i jak kompilowałem w Devie nigdy takich problemów nie miałem, teraz próbowałem to jakoś rozwiązać ale nic nie działa :S

Pokaż argumenty, z jakimi wołasz kompilator (w IDE w ustawieniach projektu, C++->Command Line czy coś takiego) - coś się wymyśli.

Jeśli o mnie chodzi:
/GL /D "WIN32" /D "NDEBUG" /D "_UNICODE" /D "UNICODE" /FD /EHa /MD /Fo"Release\\" /Fd"Release\vc90.pdb" /W3 /nologo /c /Zi /clr /TP /errorReport:prompt
Naprawdę potrzebuje pomocy, normalnie już bym się dawno na visuala obraził i przeżucił na Deva, ale mam Vistę :S
« Ostatnia zmiana: Kwiecień 15, 2009, 19:47:26 wysłana przez Control »

Offline vashpan

  • Użytkownik
    • Strona

# Kwiecień 15, 2009, 19:58:41
/clr - wyrzuc to ! Ta flaga oznacza ze twoj kod jest kompilowany jako potencjalnie .NET'owy, niestety, sama sie tam nie wziela. Musiales albo ustawic ja sam, albo jakims cudem wybrales zly wizard gdy tworzyles projekt.

Project -> <nazwa_projektu> Properties... -> Configuration Properties ->General -> Common Language Runtime Support [ No Common Language Runtime Support ] ( przypilnuj by tak bylo dla kazdego targetu )

Offline Control

  • Użytkownik

# Kwiecień 15, 2009, 20:21:42
/clr - wyrzuc to ! Ta flaga oznacza ze twoj kod jest kompilowany jako potencjalnie .NET'owy, niestety, sama sie tam nie wziela. Musiales albo ustawic ja sam, albo jakims cudem wybrales zly wizard gdy tworzyles projekt.

Project -> <nazwa_projektu> Properties... -> Configuration Properties ->General -> Common Language Runtime Support [ No Common Language Runtime Support ] ( przypilnuj by tak bylo dla kazdego targetu )

Dzięki, jestem 'zielony' w tym IDE i nawet nie wiedzialem ze cos takiego istnieje, rozwiazanie pomoglo, program sie skompilowal na /MT - teraz tylko przetestuje czy dziala na 'czystym kompie'.