Autor Wątek: Could not find dependent assembly - problem z przenośnością  (Przeczytany 1825 razy)

Offline Furry

  • Użytkownik
    • DevBlog

# Marzec 09, 2011, 16:06:41
Witam, jak znakomita część osób piszących w tym dziale mam problem z wersją release programu z Visual C++ EE 2008 . Aplikacja nie działa u osób które nie posiadają VC++. Dotąd korzystałem z info które jest zamieszczone na WIKI, ale tym razem dzieje się coś dziwnego czego nie potrafię wyjaśnić:
-na Windows Vista/7 (32/64 bit):
 Program od razu się wyłącza, tzn nawet nie widać, że się uruchamia, czasami wyrzuca komunikat o błędnej konfiguracji
Cytuj
"Nie można uruchomić aplikacji, ponieważ jej konfiguracja równoczesna jest niepoprawna. Więcej szczegółów można znaleźć w dzienniku zdarzeń aplikacji lub przy użyciu narzędzia wiersza polecenia sxtrace.exe."
-Linux Ubuntu / Mac 6.1   - program uruchamiany przez WINE:
Cytuj
fixme:actctx:parse_depend_manifests Could not find dependent assembly L"Microsoft.VC90.DebugCRT" (9.0.21022.8)
err:module:import_dll Library MSVCP90D.dll (which is needed by L"Z:\\Users\\User\\Desktop\\Release\\Presenter3D.exe") not found
err:module:import_dll Library MSVCR90D.dll (which is needed by L"Z:\\Users\\User\\Desktop\\Release\\Presenter3D.exe") not found
err:module:LdrInitializeThunk Main exe initialization for L"Z:\\Users\\User\\Desktop\\Release\\Presenter3D.exe" failed, status c0000135
### LOG ### Command '/Applications/Wine.app/Contents/Resources/bin/wine /Users/User/Desktop/Release/Presenter3D.exe' returned status 53.


Mój manifest:
Cytuj
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level='asInvoker' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC90.DebugCRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>
  <file name="msvcm90.dll"/>
  <file name="msvcp90.dll"/>
  <file name="msvcr90.dll"/>
</assembly>
Manifest jest oczywiście ustawiony na YES

Przypuszczam, że problem tkwi w tym, że aplikacja chce  MSVCP90D.dll itp. Tylko nie wiem co zrobić z tym fantem, takich DLLek nawet w systemie nie mam - dotąd nie były potrzebne.
Czy ma ktoś pomysł jak rozwiązać ten problem? Może już ktoś się spotkał z czymś takim?

Offline Mr. Spam

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

Offline Dab

  • Redaktor
    • blog

# Marzec 09, 2011, 16:23:04
Dziwny ten manifest i do niczego niepotrzebny. Masz ofc zainstalowane redisty? Upewnij się jeszcze że wszystkie składowe części aplikacji są kompilowane tym samym Visualem na tych samych ustawieniach. Ja miałem kiedyś taki problem, że jedną podbibliotekę statyczną skompilowałem w trybie debug.

Offline vashpan

  • Użytkownik
    • Strona

# Marzec 09, 2011, 20:10:02
Dokladnie jak mowi Dab moze byc ze jakas biblioteka jest kompilowana w trybie debug. W koncu ten MSVCP90D.dll skads musi byc ;) Visual strasznie miesza z tymi konfigami... Chyba ze chodzi o ten smieszny manifest. Ogolnie to ja tam manifestow w programach C++ nigdy nie uzywalem i jakos zyje. Po co to ?

A co to jest MSVCP90D ? Biblioteka standardowa C++ w wersji Debug. ( przewaznie w polaczeniu z biblioteka standardowa C ;) -> MSVCR90 ) 

Offline Furry

  • Użytkownik
    • DevBlog

# Marzec 10, 2011, 14:13:59
Macie racje z tym, że któraś biblioteka musi mimo wszystko kompilować mi się w dziwny Debug. Tylko teraz jest problem bo zupełnie nie wiem co nie gra, wiem już w jakim projekcie(ostatnim po którym bym się tego spodziewał swoją drogą - SDL :( ).
Gdyby ktoś zechciał zerknąć na konfigurację i powiedzieć co tu jest źle(i jak to poprawić), to byłbym wdzięczny:
C++:
Cytuj
/O2 /Ob1 /I "..\..\include" /D "NDEBUG" /D "_WINDOWS" /D "_WIN32_WINNT=0x0400" /D "_VC80_UPGRADE=0x0600" /D "_WINDLL" /GF /FD /EHsc /MDd /Gy /Fp".\Release/SDL.pch" /Fo".\Release/" /Fd".\Release/" /W3 /nologo /c /TP /errorReport:prompt
Linker:
Cytuj
/OUT:".\Release/SDL.dll" /INCREMENTAL:NO /NOLOGO /DLL /MANIFEST /MANIFESTFILE:".\Release\SDL.dll.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /PDB:".\Release/SDL.pdb" /SUBSYSTEM:WINDOWS /DYNAMICBASE:NO /IMPLIB:".\Release/SDL.lib" /MACHINE:X86 /ERRORREPORT:PROMPT winmm.lib dxguid.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
Manifest:
Cytuj
/nologo /outputresource:".\Release\SDL.dll;#2"
Jakieś pomysły?

Projekt VC był ściągnięty bezpośrednio ze strony developera, więc sądziłem, że będzie wszystko ok. A tymczasem, tworzę projekt czysto w oparciu o SDLa i właśnie na nim mi pokazuje komunikaty jak w 1 poście.
« Ostatnia zmiana: Marzec 10, 2011, 14:19:53 wysłana przez Furry »

Offline Dab

  • Redaktor
    • blog

# Marzec 10, 2011, 14:18:05
/MDd w opcjach kompilacji to użycie biblioteki C++ w trybie debug DLL.

Offline Furry

  • Użytkownik
    • DevBlog

# Marzec 10, 2011, 14:20:15
wszędzie tak robie i działa...  ale sprawdzę, może tylko jakimś cudem wcześniej działało...

Edit:
faktycznie jakimś cudem wtedy działało i działają nadal te programy które były kompilowane z MDd...

Edit2:
Zmieniłem na MD i śmiga, wielkie dzięki za pomoc.
« Ostatnia zmiana: Marzec 10, 2011, 18:15:50 wysłana przez Furry »