Unresolved external symbol, własna biblioteka statyczna
Ostatnio zmodyfikowano 2013-05-05 23:02
Flare Temat założony przez niniejszego użytkownika |
Unresolved external symbol, własna biblioteka statyczna » 2013-05-05 19:21:34 Mam problem, mianowicie chciałem dołączyć moją statyczną bibliotekę do programu konsolowego i używać w nim funkcji, struktur itd. w niej zawartych. Wszystko byłoby pięknie gdyby tuż po tym gdy napisałem kod nie wyskoczył błąd. .\main.cpp(11) : warning C4091: 'extern ' : ignored on left of 'Hamster' when no variable is declared main.obj : error LNK2001: unresolved external symbol "public: void __thiscall Hamster::SetHealth(int)" (?SetHealth@Hamster@@QAEXH@Z) Nie mówić, że biblioteka musi być w tym samym folderze co projekt bo to nie prawda, już próbowałem. Proszę o szczegółowe wyjaśnienie przyczyny i jeśli można poprawienie kodu. (Testowane w Visual Studio 2008) Kod statycznej biblioteki: struct Hamster { public: int Health; void SetHealth( int newHealth ) { if( newHealth <= 100 && newHealth > 0 ) this->Health = newHealth; } };
Kod programu konsolowego: #include <iostream> using namespace std;
#pragma comment(lib, "../Release/mylib.lib")
extern struct Hamster { public: int Health; void SetHealth( int newHealth ); };
void main() { Hamster White; White.SetHealth( 100 ); cout << White.Health << endl; }
Robię to pierwszy raz, zabije jak ktoś wytłumaczy na odpieprz :D |
|
DejaVu |
» 2013-05-05 23:02:15 Ajajaj... :P W Visual C++ można to zrobić na dwa sposoby, ale omówię prostszy (który zakłada, że jesteś autorem własnej biblioteki i zakładasz, że ją będziesz rozwijać). 1. Tworzysz w solucji projekt, ustawiasz mu opcję, że jest to 'static library' i wrzucasz pliki źródłowe i nagłówkowe do tej biblioteki - jak się kompiluje to jest cacy. 2. Tworzysz drugi projekt, który jest aplikacją (np. konsolową). 3. W projekcie 'konsolowym' w opcjach projektu ustawiasz 'include directory' taki, aby widział pliki nagłówkowe z projektu z pierwszego kroku. 4. Następnie na projekcie 'konsolowym' klikasz prawym klawiszem i ustawiasz "additional dependencies" i zaznaczasz checkboxa, że aplikacja konsolowa jest zależna od 'twojej biblioteki'. 5. W projekcie konsolowym robisz: #include <plik_z_biblioteki.h>
6. Kompilujesz i działa. |
|
« 1 » |