2010-04-28 9 views
48

Podczas kompilacji i łączenia, jaki jest pożytek z .exp? Jaka jest różnica między .lib i .dll? Wiem, że użyjemy .lib, podczas gdy linkowanie i .dll będą używane podczas uruchamiania programu. Ale jaka jest dokładnie różnica między .lib i .dll?jaki jest pożytek z .exp i jaka jest różnica między .lib a .dll

Czy plik .lib nie zawiera kodu funkcji pochodzących z plików .dll? Jaka jest potrzeba używania dwóch oddzielnych plików?

Proszę wyjaśnić. Z góry dzięki

Odpowiedz

71

W przypadku biblioteki importu dla biblioteki DLL plik .lib ma wartość , a nie. Zawiera on po prostu listę funkcji w skojarzonej bibliotece DLL - wystarczy, aby linker osadził odniesienie do tej biblioteki DLL w coś związanego z biblioteką, ale niewiele więcej.

Plik .exp to plik eksportu - w zasadzie prawie taki sam jak plik .lib. Jest używany (przynajmniej pierwotnie), gdy masz zależność cykliczną. Załóżmy na przykład, że masz bibliotekę DLL, która działa jako wtyczka do pliku wykonywalnego. Plik wykonywalny dostarcza niektóre wyeksportowane funkcje do użycia przez wtyczki DLL, ale także musi być w stanie wywoływać niektóre funkcje wtyczek (np. Ładować i inicjować wtyczkę).

Biblioteka DLL nie będzie łączyła się, dopóki plik wykonywalny nie zostanie zbudowany w celu dostarczenia pliku .lib - ale plik wykonywalny nie będzie łączył się, dopóki biblioteka DLL nie zostanie zbudowana w celu dostarczenia pliku .lib. Aby przełamać zależność, uruchamiasz linker względem pliku wykonywalnego, który się nie powiedzie (ponieważ nie może znaleźć pliku .lib dla biblioteki DLL), ale utworzy plik .exp w postaci. Następnie łączysz bibliotekę DLL z plikiem .exp dla pliku wykonywalnego. Następnie można ponownie uruchomić łącze, aby utworzyć plik wykonywalny, korzystając z pliku .lib dla biblioteki DLL.

Powiązane problemy