2012-09-20 14 views
10

Mój projekt jest samodzielną aplikacją C++, która używa FMOD do odtwarzania dźwięku. Wcześniej opracowałem ten sam projekt z Visual Studio 2010 bez żadnych problemów, ale 2012 daje mi klasyczny błąd: "Program nie może się uruchomić, ponieważ na komputerze brakuje pliku fmodex.dll. Spróbuj ponownie zainstalować program, aby rozwiązać ten problem. " Projekt wydaje się ładować inne biblioteki DLL (takie jak pliki pokrewne Direct3d i kompilator shader d3d).Nie znaleziono zależności DLL podczas debugowania za pomocą Visual Studio 11 RC

Problem występuje tylko w przypadku próby debugowania lub uruchomienia programu z poziomu IDE, nie wtedy, gdy skopiuję plik wykonywalny do odpowiedniego katalogu z biblioteką DLL i uruchom go ręcznie. Jeśli usuwam wszystkie odwołania do FMOD z programu, debugowanie i uruchamianie działa poprawnie. Upewniłem się, że mam poprawny katalog roboczy w ustawieniach projektu (oprócz tego, że ładuje wszystkie inne pliki w porządku w tym samym katalogu). Pierwotnie skonwertowałem projekt z Visual Studio 2010, ale próbowałem stworzyć nowy projekt od podstaw bez powodzenia. Też przezwyciężyłem wszystkie możliwe ustawienia kompilatora i linkera, a Google również nie pomaga.

Zgaduję, że ten problem ma coś wspólnego z nowymi aplikacjami w stylu Metro i sposobem radzenia sobie z zewnętrznymi zależnościami, ale także zmieniłem "Wsparcie dla aplikacji Metro Style". Zaczynam myśleć, że naprawdę próbowałem wszystkiego, co mogłem, i nie miałem pojęcia, co dalej. Wskazówki, jak zdobyć więcej informacji diagnostycznych, również zostaną docenione! Dzięki!

Edit: wersja Visual Studio Używam jest Visual Studio 2012 RC Ostateczny, wersja 11.0.50706.0 QRELRC lipca 2012

+0

Jak zwykle problemy z DLL, _have próbowałeś Dependency Piechur_? W szczególności tryb profilowania? – MSalters

Odpowiedz

16

przejdź do właściwości projektu:

Configuration Properties | Debugging | Environment 

i dodaj następujący element:

PATH=c:\path\where\the\dll-is;$(Path) 
+0

Brzmi jak to może być to! Muszę spróbować, kiedy wrócę do domu z pracy! – hhatinen

+0

Doskonale! To przybrało na sile. Dziękuję Ci! – hhatinen

+0

To pozwoli ci uruchomić program w debugerze, ale to nie rozwiązuje problemu, że program nie szuka poprawnie swoich bibliotek DLL. Oznacza to, że jeśli ktoś inny uruchomi program z bieżącym katalogiem ustawionym gdzieś indziej, to również się nie powiedzie. (Jest to typowe, jeśli uruchamiasz program za pomocą wiersza poleceń, na przykład.) –

0

To może być to, że VS działa aplikację z innego katalogu bieżącego do kiedy uruchamiasz aplikację ręcznie.

VS zwykle ustawia bieżący katalog na folder projektu, który zwykle nie jest taki sam jak folder, w którym są zbudowane pliki binarne. Kiedy uruchamiasz go ręcznie, prawdopodobnie uruchamiasz go z tego ostatniego, a nie pierwszego.

Jeśli to jest problem, kod ładujący plik fmodex.dll musi być zależny od bieżącego katalogu znajdującego się w ścieżce wyszukiwania DLL, co może powodować duże zagrożenie bezpieczeństwa (wyszukiwanie "sadzenie DLL" lub "wstępne ładowanie" biblioteki DLL)) i który jest aktywnie blokowany przez niektóre konfiguracje Windows.

+0

Obecny katalog powinien być w porządku (jeśli masz na myśli katalog roboczy w ustawieniach projektu). Ale może się okazać, że debugger aktywnie uniemożliwia programowi załadowanie biblioteki DLL z bieżącego katalogu. Poszedłem do wypróbowania czegoś nawet tak drastycznego, jak skopiowanie pliku fmodex.dll do mojego lokalnego folderu System32, a program wydawał się zacząć dobrze. – hhatinen

2

Moje sympatie, żyję w piekle DLL dużo ostatnio wydaje się. Dwie propozycje:

  1. można jeździć IDE z wiersza poleceń z devenv który posiada przełącznik /useenv.

    "... Use PATH, INCLUDE, LIBPATH, and LIB environment variables instead of IDE paths for VC++ builds.

  2. dumpbin /dependents [*.exe] [*.dll] pokaże DLL zależności.

    dumpbin /dependents openssl.exe

Microsoft (R) COFF/PE Dumper Version 10.00.40219.01 Copyright (C) Microsoft Corporation. All rights reserved. Dump of file openssl.exe

File Type: EXECUTABLE IMAGE

Image has the following dependencies:

SSLEAY32.dll 
LIBEAY32.dll 
WSOCK32.dll 
MSVCR80.dll 
KERNEL32.dll 

Summary 

    4000 .data 
    14000 .rdata 
    1000 .rsrc 
    33000 .text 
+0

Przełącznik/useenv sprawia, że ​​VS nie otwiera w ogóle projektu. Występuje następujący błąd dla każdego projektu: 'F: \ Program Files \ MSBuild \ Microsoft.Cpp \ v4.0 \ V110 \ Microsoft.Cpp.Common.props (63,3): Zaimportowany projekt" G: \ build \ CommonConfiguration \ Neutralne \ sdk.props "nie zostało znalezione. Potwierdź, że ścieżka w deklaracji jest poprawna, a plik istnieje na dysku. (F jest dyskiem, na którym znajduje się studio graficzne, a G jest projektem, nie ma katalogu G: \ build ..). – hhatinen

Powiązane problemy