2010-09-09 8 views
5

Ich habe gerade ein Problem, das ich versucht habe, für die längste Zeit zu beheben.Wie Link zu einer LIB-Datei in Visual C++ 2010? Ohne auf das Projekt zu verweisen?

Ich habe ein statisches Bibliothek-Projekt in Visual C++, und ich mag ein anderes Projekt, um es verknüpfen zu können. Bis jetzt habe ich lediglich einen Verweis auf das statische Bibliotheksprojekt hinzugefügt, das die Bibliothek automatisch verknüpft.

Ich möchte in die Bibliothek verknüpfen können, nur die Header-Dateien verwenden und die LIB-Datei. Ich erhalte jedoch einen Fehler "Ungelöstes externes Symbol".

ich dachte, dass ich es richtig zu machen - ich das Verzeichnis enthält angegeben, das Bibliotheksverzeichnis und ging in die Linkereingabeeigenschaften und lieferte die lib als zusätzliche Abhängigkeit.

Ich bin in der Lage andere statische Bibliotheken auf diese Weise zu verweisen (wie SDL), also warum bekomme ich Fehler, wenn ich versuche, meine zu verweisen?

Danke für die Hilfe.

Ist das Problem, dass es nicht die tatsächliche lib-Datei referenziert, oder ist etwas in der lib selbst? Dies sind die Fehlermeldungen erhalte ich:

Fehler 2 Fehler LNK2019: nicht aufgelöstes externes Symbol "public: void __thiscall xengine :: XCore :: XScreen :: init (Klasse xengine :: XCore :: xgame &)" (? init @ XScreen @ XCore @ XEngine @@ QAEXAAVXGame @ 23 @@ Z) referenziert in der Funktion "void __cdecl XEngine :: XEngineInit (Klasse XEngine :: XCore :: XScreen &, Klasse XEngine :: XCore :: XGame &)" (? XEngineInit @ XEngine @@ YAXAAVXScreen @ XCore @ 1 @ AAVXGame @ 31 @@ Z) C: \ Benutzer \ Xander Masotto \ Dokumente \ Visual Studio 2010 \ Projekte \ Pong \ Pong \ source.obj Pong

Fehler 3 Fehler LNK2019 : nicht aufgelöstes externes Symbol "public: __thiscall XEngine :: XCore :: XScreen :: ~ XScreen (void)" (?? 1XScreen @ XCore @ XEngi ne @@ QAE @ XZ) in Funktion referenziert "Leere __cdecl xengine :: XEngineInit (Klasse xengine :: XCore :: xgame &)" (XEngineInit @ xengine @@ YAXAAVXGame @ XCore @ 1 @@ Z) C: \ Users \ Xander Masotto \ Dokumente \ Visual Studio 2010 \ Projekte \ Pong \ Pong \ source.obj Pong

Fehler 4 Fehler LNK2019: ungelöst externes Symbol "öffentlich: __thiscall XEngine :: XCore :: XScreen :: XScreen (void)" (?? 0XScreen @ XCore @ xengine @@ QAE @ XZ) in Funktion referenziert "Leere __cdecl xengine :: XEngineInit (Klasse xengine :: XCore :: xgame &)" (? XEngineInit @ xengine @@ YAXAAVXGame @ XCore @ 1 @@ Z) C: \ Benutzer \ Xander Masotto \ Dokumente \ Visual Studio 2010 \ Projekte \ Pong \ Pong \ source.obj Pong

+0

Es sollte funktionieren, wie Sie beschreiben. Bitte geben Sie eine (relevante und prägnante) Stichprobe der Fehler? –

Antwort

4

Stellen Sie sicher, dass Sie die Funktionen, Klassen und Variablen in Ihrer Bibliothek exportieren wenn Sie andere Anwendungen (d. h. Ihre DLL oder EXE). Standardmäßig sind sie nicht verfügbar.

Der Grund dafür ist in der Regel gelegt, wenn Sie das Projekt für Ihre Bibliothek erstellen.

#ifdef TESTLIB_EXPORTS 
#define TESTLIB_API __declspec(dllexport) 
#else 
#define TESTLIB_API __declspec(dllimport) 
#endif 

Mit dem obigen Code während der Projekterstellung dort erzeugt werden, sind nur noch zwei Dinge für mich Funktionen, Klassen zu tun, um zu belichten oder Variablen:

1) Stellen Sie sicher, dass ich TESTLIB_EXPORTS als Präprozessor definiert .Projekteinstellungen: C++/Preprocessor/PreprocessorDefinitions

2) Verwenden Sie die TESTLIB_API definieren zu jeder Funktion, die Klasse oder Variable i ausgesetzt werden soll:

class TESTLIB_API Order { 
    void doSomething(); 
}; 
+0

Ist das wirklich der richtige Weg? Er versucht, eine statische .lib zu erstellen, mit der er verlinkt. Warum also braucht er dlexports? Ich hatte den Eindruck, dass diese nur zum Erstellen einer DLL benötigt wurden. – Ben

Verwandte Themen