Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Unresolved external symbol, własna biblioteka statyczna

Ostatnio zmodyfikowano 2013-05-05 23:02
Autor Wiadomość
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:
C/C++
struct Hamster
{
public:
    int Health;
   
    void SetHealth( int newHealth )
    {
        if( newHealth <= 100 && newHealth > 0 )
             this->Health = newHealth;
       
    }
};

Kod programu konsolowego:
C/C++
#include <iostream>
using namespace std;

// Uwaga - sciezka jest prawidlowa.. inaczej wyskoczyl by blad
// o braku pliku
// (ogolnie wszystko w jednej solucji jako 2 projekty dlatego ../release)
#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
P-82125
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:
C/C++
#include <plik_z_biblioteki.h>
6. Kompilujesz i działa.
P-82151
« 1 »
  Strona 1 z 1