Budowa się powiodła, ale nie.zostanie utworzony plik lib

Odziedziczyłem znaczną ilość kodu, w tym projekt visual studio, który ma (najlepiej jak potrafię) zbudować .plik lib. Visual studio says".. Generowanie Kodu... Tworzenie Biblioteki... Tworzenie pliku Informacji przeglądania...", a na koniec mówi, że budowa się powiodła. W folderze release/debug znajduje się kilka .pliki obj, ale nie ma .plik lib. Co mogę przegapić?

Dzięki!

Author: Jim, 2010-10-16

10 answers

Otwórz właściwości projektu(kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań, wybierz "Właściwości"). W polu 'Bibliotekarz' zaznacz 'Output File' - tam powinno być wyjście.

Jeśli to wygląda dobrze, spróbuj dir /s *.lib w odpowiednim podkatalogu dla Twojego projektu, aby sprawdzić, czy możesz zlokalizować bibliotekę wyjściową według daty i godziny. Jeśli nadal nie możesz go znaleźć, spróbuj odbudować (kliknij prawym przyciskiem myszy projekt, wybierz "Przebuduj").

Dla bibliotek DLL, a .Plik Lib nie jest tworzony, jeśli DLL nie eksportuje nic dla użycie zewnętrzne. Nie wydaje mi się, że dotyczy to statycznych kompilacji lib, ale upewniłbym się, że eksportujesz coś publicznego z kodu źródłowego projektu biblioteki.

 88
Author: Steve Townsend,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-16 20:24:27

.lib nie zostanie wygenerowany, jeśli nie dodasz prefiksu _ _ declspec (dllexport) dla metod.

 29
Author: snb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-05 05:36:03

Moja statyczna biblioteka zawiera tylko dwie klasy szablonów, więc nie miałem .plik cpp. To spowodowało, że Visual Studio 2015 nie wypuścił .plik lib. Aby to rozwiązać, zrobiłem plik huh.cpp, który zawiera wszystkie nagłówki.

 17
Author: Grault,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-20 01:04:36

Miałem ten sam problem, mimo że używałem już funkcji __declspec(dllexport).

Twój plik ProjectName.cpp musi #include "ProjectName.h". Jeśli nie dołączysz pliku nagłówkowego, funkcje nie zostaną wyeksportowane. DLL buduje dobrze, bez błędów lub ostrzeżeń (przynajmniej w VS2017 15.8), ale nie masz pliku LIB.

Dołącz nagłówek i generowany jest plik boom-LIB. Jestem pewien, że błąd nowicjusza, ale każdy musi się gdzieś uczyć.

 6
Author: Chuck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-22 17:19:44

Właśnie natknąłem się na ten problem.

Było to spowodowane użyciem nieprawidłowego makra w definicji katalogu wyjściowego. W moim przypadku było to Tutaj wpisz opis obrazka

Kiedy powinno być

Tutaj wpisz opis obrazka

Musiałem wyczyścić pełną ścieżkę w drugim zrzutu ekranu. Miałem niepoprawne makro. Używałem MsBuildProjectDir Kiedy powinienem był używać MsBuildProjectDirectory. Pole tekstowe tylko do odczytu wyświetli pełną ścieżkę (np: C:\Development\blah\blah\blah\), gdy katalog wyjściowy jest poprawny. Jeśli wyjście katalog nie jest poprawny, dostaniesz coś takiego jak pierwszy zrzut ekranu.

 2
Author: CHendrix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-14 12:14:04

Jeśli metody, które chcesz wyeksportować są w klasie, musisz __declspec(dllexport) Na klasie. Inaczej nie .powstanie lib.

 2
Author: Crubuntu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-28 12:04:39

Eksportowałem klasę z biblioteki dll, ale zadeklarowałem klasę inline .plik H. The .plik cpp był tam, ale pusty. Ta konfiguracja powodowała ... plik lib nie zostanie wygenerowany.

Przeniosłem implementację funkcji do .plik cpp i teraz plik lib jest generowany.

To jest w VS2019.

 1
Author: zar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-20 17:34:27

W projekcie DLL należy umieścić __declspec(dllexport) początek metod zdefiniowanych w .h i .pliki cpp.

Po tym wszystkim, skompilować dll ponownie, więc .plik lib zostanie wygenerowany i gotowy do linkowania.

put Class Foo
{
public:
    __declspec(dllexport) int GetFoo() const;
 0
Author: Gravitas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-14 12:17:24

Miał ten sam problem z VS2019. W moim przypadku budowałem kilka razy bez zdefiniowanych symboli (tzn. pliki cpp były puste).

Po dodaniu definicji symboli do plików cpp zacząłem zauważać ten problem(żaden plik lib nie był generowany).

Proste czyszczenie poprzez 'Rebuild all' naprawiło to. Być może jeśli zbudujesz, gdy nie ma zdefiniowanych symboli, coś zostanie buforowane gdzieś, że masz pusty DLL produktu, i trzeba wyczyścić rozwiązanie, aby zresetować ten buforowany stan.

 0
Author: Elliot Woods,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-23 07:21:27

Mój problem polegał na tym, że w projektach Properties>C/C++>CommandLine źle sprecyzowałem przełącznik. To zamiast pisać /D_HASHING_BUILD_DLL napisałem /D_Hashing_BUILD_DLL.

Uwaga:
Tak buduję swoje DLL/Lib pliki w Visual studio: (a moje Hashing.h wygląda tak:)

#ifndef HASHING_H
#define HASHING_H

/* If we are we on Windows, we want a single define for it.*/
#if !defined(_WIN32) && (defined(__WIN32__) || defined(WIN32) || defined(__MINGW32__))
#define _WIN32
#endif /* _WIN32 */

#if defined(_WIN32) && defined(_HASHING_BUILD_DLL)
/* We are building Hashing as a Win32 DLL */
#define HASHING_API __declspec(dllexport)
#elif defined(_WIN32) && defined(HASHING_DLL)
/* We are calling Hashing as a Win32 DLL */
#define HASHING_API __declspec(dllimport)
#elif defined(__GNUC__) && defined(_HASHING_BUILD_DLL)
/* We are building Hashing as a shared / dynamic library */
#define HASHING_API __attribute__((visibility("default")))
#else
/* We are building or calling HASHING as a static library */
#define HASHING_API
#endif

//your inlcudes

class HASHING_API MyClass
{
//...
};

#endif // !HASHING_H

I w ścieżce, którą podałem wcześniej, po prostu używam przełącznika, który zdefiniowałem tutaj i tam idziesz, DLL jest zbudowany dobrze!

 0
Author: Rika,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-27 01:48:22