Einbinden von Libraries
-
Hallo,
Wie binde ich eine fertig compilerte (statische) Library korrekt in ein neues Projekt ein? Irgendwie hingefummelt bekamm' ich das schon, aber ich würde es gerne richtig (systematisch) machen.
Wäre sehr nett, wenn mir das jemand kurz erklären könnte!
-
Quick&Dirty schrieb:
Wie binde ich eine fertig compilerte (statische) Library korrekt in ein neues Projekt ein? Irgendwie hingefummelt bekamm' ich das schon, aber ich würde es gerne richtig (systematisch) machen.
Ich verstehe nicht ganz was du mit systematisch meinst. Aber es gibt mehrer Ansätze.
1.) Über die Projekteigenschaften->Linker->Eingabe->Zusätzliche Abhängigkeiten
2.) Direkt im Code (finde ich persönlich nicht so gut):#pragma comment(lib, "MyLibrary.lib")3.) Wohl eher nicht hier: Mit LoadLibrary...
Bei 1-2 benötist du noch die Header-Datei zur Bibliothek, in der die Prototypen deklariert sind.
-
aja - warum nicht im code? da weiß wenigstens jeder gleich, dass da noch die eine oder andere Lib dazugehört...
Es gibt doch noch die Möglichkeit die library einfach mit "Hinzuladen" (links im Projektmappen explorer) einzubinden. Möglicherweise ist das je mit der Eibindung via Projekteigenschaften identisch...
Mit systematisch meine ich folgendes: Die Einbindung sollte so erfolgen, dass automatisch zwischen der Debug und der Release Version der lib umgeschaltet wird - je nachdem wie das neue projekt gerade erstellt wird
-
Quick&Dirty schrieb:
aja - warum nicht im code? da weiß wenigstens jeder gleich, dass da noch die eine oder andere Lib dazugehört...
Wie gesagt ich nutze immer die Projekteigenschaften.
Quick&Dirty schrieb:
Es gibt doch noch die Möglichkeit die library einfach mit "Hinzuladen" (links im Projektmappen explorer) einzubinden. Möglicherweise ist das je mit der Eibindung via Projekteigenschaften identisch...
Kenne den Weg nur über Projekteigenschaften.
Quick&Dirty schrieb:
Mit systematisch meine ich folgendes: Die Einbindung sollte so erfolgen, dass automatisch zwischen der Debug und der Release Version der lib umgeschaltet wird - je nachdem wie das neue projekt gerade erstellt wird
Meines Wissen gibt es da keine "Automatik". Ich weiß nicht wie es beim Einbinden per Präprozessor ist (#pragma). Ich bin gerade am Überlegen... Besitzen lib Dateien überhaupt (Debug) Code? Eigentlich doch nicht, sondern es wird entweder die Debug oder Release Version der Dll genutzt und diese könntest du ja ins Ausgabeverzeichnis der Exe kopieren (ausgeben lassen). Natürlich in korrekter Version.
-
HaJo. schrieb:
Meines Wissen gibt es da keine "Automatik". Ich weiß nicht wie es beim Einbinden per Präprozessor ist (#pragma). Ich bin gerade am Überlegen... Besitzen lib Dateien überhaupt (Debug) Code? Eigentlich doch nicht, sondern es wird entweder die Debug oder Release Version der Dll genutzt und diese könntest du ja ins Ausgabeverzeichnis der Exe kopieren (ausgeben lassen). Natürlich in korrekter Version.
Ich verwende immer statische libs zum Linken - möglichst keine dlls...
-
Ich mache das bei meinen eigenen immer über die Header mit pragma.
In der Header habe ich dann z.B.
#ifdef _CMSSQLDATABASE_EXPORTS_ #define CMSSQLDATABASE_API __declspec(dllexport) #else #define CMSSQLDATABASE_API __declspec(dllimport) #endif #ifndef _CMSSQLDATABASE_API_NOAUTOLIB_ #ifdef _DEBUG #pragma comment(lib, "CMSSQLDatabaseD.lib") #else #pragma comment(lib, "CMSSQLDatabase.lib") #endif #endif class CMSSQLDATABASE_API CMSSQLDatabase ... ... ...sowas drin
Jetzt brauche ich nur beim erstellen der LIB
_CMSSQLDATABASE_EXPORTS_ definieren was ich in einer der anderen Header mache.
Dadurch werden die Funktionieren exportiert.
Da beim verwender der LIB kein _CMSSQLDATABASE_EXPORTS_ definiert ist wird die LIB importiert.Welche Version er gibt sich durch _DEBUG welches automatisch von VS defniert wird wenn es Debug oder release ist.
-
Ja - so geht's natürlich! Hätt ich selber drauf kommen können! :p Vielen Dank!
-
Ich füge die Libs meistens dem Projekt hinzu und schließe in Debug bzw. Release jeweils die nicht benötigte von Buid aus.
-
Ich tendiere grundsätzlich dazu nur pragma comment(lib,...) zu verwenden.
Das macht einfach Projekte transparenter und Code Snippets und ganze Dateien lassen sich direkt in andere Projekte aufnehmen ohne das man mühsam auch die Projekteinstellungen anpassen müsste.Zumeist gebe iich mit #pragma message eine Meldung, aus, dass automatisch mit einer anderen LIB gebunden wird:
#pragma message("Automatically linking with myxyz.dll")