2011-06-18 10 views
5

Buduję bibliotekę DLL w programie Visual C++ 2008 i chcę, aby środowisko wykonawcze było statycznie połączone z biblioteką DLL. Więc poszedłem do opcji projektu i ustawiłem Runtime Library na Multi-threaded (/MT). To zawsze działało dla innych projektów w przeszłości. Ale kiedy ją zbuduję, nadal będę na liście Dependency Walker z MSVCR90.dll.Dlaczego widzę zależność MSVCR90, mimo że ustawiłem opcję/MT?

Ktoś wie, co może spowodować?

+2

Oczywiście plik EXE, który ładuje bibliotekę DLL, nie został zbudowany z tą samą opcją. Lub inna biblioteka DLL, która została załadowana, zajmuje tylko jeden. –

+0

@Hank: Nie dotyczy tutaj. Patrzę na to w Dependency Walker, i pokazuje na najwyższym poziomie drzewa, a nie pod innym załadowanym DLL. –

+1

Jaki eksport w 'MSVCR90' jest zależny od biblioteki DLL? –

Odpowiedz

4

Project + Properties, Linker, Command Line. Dodaj opcję/verbose. Zbuduj i przebuduj. Okno Output pokazuje linker szukający symboli. Uważaj na msvcrt.lib, to ten, który pobiera zależność od msvcr90.dll

Typową przyczyną jest połączenie pliku .lib, który ma jeden lub więcej plików .obj, które zostały skompilowane z/MD. Zależność od msvcrt.lib zostaje wprowadzona za pomocą dyrektywy #pragma comment (lib, msvcrt.lib). To każe linkerowi przeszukać msvcrt.lib bez wyraźnego określenia go jako zależności w Linker, Input, Dodatkowych zależnościach.

+0

Dzięki, okazało się, że to dokładnie to, czym było. –

Powiązane problemy