2009-02-24 11 views
55

Chcę mieć pojedynczy projekt Visual Studio, który buduje plik DLL i plik biblioteki importu (.lib). (Biblioteka importu jest statycznie połączoną biblioteką, która zajmuje się ładowaniem tego pliku DLL w innych projektach, które go używają).Jak zbudować bibliotekę importu (.lib) ORAZ DLL w Visual C++?

Poszedłem do Visual Studio C++ 2008 Express Edition, utworzyłem nowy projekt biblioteki typów i ustawiłem "Typ konfiguracji" na "Biblioteka Dyanamiczna (.dll)".

Ale kiedy buduję rozwiązanie, jedyny istotny plik wyjściowy, jaki widzę, to plik DLL; Nie widzę generowania żadnego pliku LIB. Zajrzałem do katalogu projektu i wszystkich podkatalogów (Release and Debug).

Wierzę, że możliwe jest zbudowanie LIB i pliku DLL w tym samym czasie, ponieważ on the MSDN it says "The linker creates the import library when the DLL is built." Również, another user of this website is creating LIB and DLL files at the same time using Visual C++.

Jak mogę to zrobić?

+1

Po prostu miałem dokładnie ten problem, gdy mój plik .lib nie był generowany. Po przejrzeniu wszystkich informacji mogłem znaleźć możliwe przyczyny i uważnie przejrzeć wszystkie poniższe odpowiedzi. W końcu doszedłem do wniosku, że to dlatego, że mój plik .cpp nie zawierał mojego pliku .h. :(Po prostu wyrzucam to tutaj, aby mój komentarz mógł (z małym prawdopodobieństwem) pomóc komuś/sobie, jeśli mój głupi błąd powtórzy się w jakiejś odległej przyszłości ... – user1884905

Odpowiedz

19

Wybierając "Bibliotekę klas", przypadkowo powiedziałeś, że chcesz utworzyć bibliotekę .Net przy użyciu rozszerzonego interfejsu CLI (zarządzanego) w C++.

Zamiast tego utwórz projekt Win32, a w Ustawieniach aplikacji na następnej stronie wybierz "DLL".

Można również utworzyć bibliotekę DLL MFC lub biblioteki DLL ATL z tych bibliotek, jeśli chcemy wybrać tę trasę, ale wygląda na to, że nie.

68

Czy Twój projekt DLL ma rzeczywisty eksport? Jeśli nie ma eksportu, linker nie wygeneruje pliku .lib biblioteki importu.

W non-Express w wersji VS, nazwa import libray jest specfied w ustawieniach projektu tutaj:

Configuration Properties/Linker/Advanced/Import Library 

Przypuszczam, że to samo w Express (jeśli to jeszcze zapewnia możliwość konfiguracji nazwę).

+6

Dzięki Michael, W moim przypadku lib nie został wygenerowany, ponieważ nie było eksportu. – Uday

+4

OK, więc co to znaczy? Określiłem bibliotekę importu w moim projekcie dll i nadal nie tworzyłem biblioteki dll. Umieściłem go na projekcie, który używa mojej biblioteki DLL i nie spowodował jej również zbudowania. Używam Visual C++ 2010 Express – Thom

+1

Czy mógłbyś trochę wyjaśnić? Określenie samej biblioteki importowania nie generuje pliku .lib. –

8

również powinna określać def nazwisko w ustawieniach projektu tutaj:

Konfiguracja> Właściwości/input/Advanced/modułu> Definicja pliku

+4

Znajduje się w 'Configuration Properties' /' Linker'/'Input' /' Module Definition File' w VS2010 – Pakman

+0

Jak utworzyć plik definicji? Co wchodzi w to? –

+0

Dziękuję ... to doprowadzało mnie do muru. –

23

OK, więc znalazłem odpowiedź z http://binglongx.wordpress.com/2009/01/26/visual-c-does-not-generate-lib-file-for-a-dll-project/ mówi, że ten problem był spowodowane przez nie eksportowanie jakichkolwiek symboli i dalsze instrukcje, jak eksportować symbole, aby utworzyć plik lib. Aby to zrobić, dodaj następujący kod do pliku .h dla biblioteki DLL.

#ifdef BARNABY_EXPORTS 
#define BARNABY_API __declspec(dllexport) 
#else 
#define BARNABY_API __declspec(dllimport) 
#endif 

Gdzie BARNABY_EXPORTS i BARNABY_API są unikalnymi definicjami dla twojego projektu. Następnie, każda funkcja eksportowania wystarczy poprzedzić przez:

BARNABY_API int add(){ 
} 

Ten problem można było zapobiec poprzez kliknięcie pola Symbole Eksportuj w nowym projekcie DLL kreatora lub głosując tak dla lobotomies dla programistów.

+0

Czy możesz to edytować, aby nie była to dokładna kopia innej odpowiedzi? Zastosowanie go do tego pytania jest dobrym punktem wyjścia. Dzięki. – Will

+0

Naprawiono, Will. Przypadkowo opublikowałem tę odpowiedź na tej stronie. Teraz posprzątałem swój bałagan. Dzięki za obserwowanie mnie. – Thom

+4

+1 dla "lobotomii dla programistów komputerowych". –

Powiązane problemy