LIB erstellen und einbinden
-
Hi
ich hab da ne Frage zu LIBs. Es ist doch so, dass in diese Programmbibliotheken die .OBJ-Files gesammelt werden, die man bei der Compilierung von dem Programmmodul erstellt bekommt.
Wie binde ich diese OBJ-Files denn in eine LIB zusammen und wie binde ich diese LIB dann in mein Projekt ein? Der Compiler, den ich verwende ist MS Visualstudio .NET 2003 Professional.Ach ja: ich hab mir mal ne Definitionsdatei geschrieben, die so aussieht (brauche ich die überhaupt?)
LIBRARY MSTRLIB EXPORTS int_to_str @1 reverse @2 read_string @3 new_string @4 safe_copy_string @5
eigentlich bräuchte ich nur noch den richtigen Aufruf für LIB und nen Tipp, wie ich die LIB dann einbinde, denn wenn ich LIB mit diesem Batch-File aufrufe
LIB /DEF:mstrlib.def /INCLUDE:strconv.obj /INCLUDE:str_in.obj /EXPORT:int_to_str /EXPORT:reverse /EXPORT:read_string /EXPORT:new_string /EXPORT:safe_copy_string /LIBPATH:E:LIBS/STRLIB /NAME:mstrlib.lib /OUT:mstrlib.lib /MACHINE:X86 /SUBSYSTEM:WINDOWS /VERBOSE
und danach LIB /list:mstrlib.lib aufrufe, wird mir nicht wie erwartet der Inhalt der LIB angezeigt, also muss irgendwo was falsch sein, ich weiß aber nicht wo.
Wäre für jeden Tipp dankbar
Gruß Lemming.
P.S: Leider hat mir die Suche nach ähnlichen Themen keine Ergebnisse geliefter...
-
wie kommst du eigentlich auf die idee überall doppelpunkte zu setzen?
ersetz die mal durch leerzeichen
-
Sovok schrieb:
wie kommst du eigentlich auf die idee überall doppelpunkte zu setzen?
ersetz die mal durch leerzeichenWeil ich dann den Fehler "Kein Argument mit Option /INCLUDE angegeben" bekomme. also geht's wohl mit leerzeichen nicht
-
Natürlich besteht die Möglichkeit, den Compiler/Linker über die Commandozeile zu bedienen, aber wenn du darin noch nicht so geübt wirst, erstelle doch einfach ein neues Projekt und wähle "Statische Bibliothek" an.
So bereitet dir Visual C++ schon alles vor und du brauchst nur noch den C++ Quellcode hinzufügen und auf erstellen zu klicken.
-
ok... folgendes problem dabei: ich hab 2 übersetzungseinheiten in der LIB: str_in und strconv (was die machen sollen ist hier nicht wichtig)
str_in lässt sich problemlos übersetzten, beim übersetzen von strconv bekomme ich diesen fehler:f:\Micha\Documents\Visual Studio
Projects\Own\Tools\testlib\testlib\strconv.cpp(35) : fatal error C1010:
Unerwartetes Dateiende während der Suche nach der Direktive für die vorkompilierte
Headerdateialle Dateien liegen im gleichen ordner, also dürfte es keine probleme geben.
die Headerdatei von strconv sieht so aus:#ifndef STR_CONV_H #define STR_CONV_H #define MAX_INT_LEN 10 void int_to_str (int n, char s[]); void reverse(char s[]); #endif
was ist da jetzt schief gelaufen??
-
OK! hab den Fehler gefunden: die Header, die ich benötige, müssen alle in die stdafx.h rein...
EDIT: aber wie binde ich jetzt die erzeugte LIB in ein Projekt ein?
Gruß Lemming
-
Projekt-Eigenschaften->Linker->Befehlszeile
Da einfach die Lib eintragen, samt Pfad. Mehrere Libs durch Leerzeichen getrennt.Projekt-Eigenschaften->C/C++->Allgemein->Zus. Includeverz.
Da das Verzeichnis der Header-Dateien der Lib hinzufügen.
-
Artchi schrieb:
Projekt-Eigenschaften->Linker->Befehlszeile
Da einfach die Lib eintragen, samt Pfad. Mehrere Libs durch Leerzeichen getrennt.ne da gehören eigentlich nur system libs rein
eigene libs solltest du lieber mit "rechtsklick auf das projekt im arbeitsbereich->dateien hinzufügen" einbinden
-
Lemming2005 schrieb:
f:\Micha\Documents\Visual Studio
Projects\Own\Tools\testlib\testlib\strconv.cpp(35) : fatal error C1010:
Unerwartetes Dateiende während der Suche nach der Direktive für die vorkompilierte
Headerdateidas bedeutet dass du angegeben hast, dass strconv.cpp einen vorkompilierten header benutzt
d.h. du musst entweder als erstes include in der cpp stdafx.h einbinden (bzw. deinen eigenen vorkompilierten header)
oder rechtsklick auf die cpp und in den einstellungen irgendwo vorkompilierte header für die datei ausschalten
was die doppelpunkte betrifft...
LIB /list mstrlib.lib
funktioniert jedenfalls bei mir einwandfrei und listet alle .obj files der lib auf
-
Uebrigens: zu Deinem Post am Anfang: EXPORTs etc. werden nur fuer DLLs benoetigt.
Gib mal "LIB /?" auf der Kommandozeile ein.
Mit dem Programm "LIB" kann man statische Libraries erstellen, die aus Objektmodulen (.obj) bestehen.
Import-Libraries fuer DLLs (auch .lib genannt) sind eine andere Baustelle ...
-
ich hab's inzwischen hinbekommen:
LIB als "Projekt" (->statische Bibliothek) anlegen, quellcode hunzufügen und erstellen... das einbinden dann mit#pragma comment(lib "libname")
funzt einwandfrei. Trotzdem danke für eure tipps!
Bis zur nächsten Frage
Gruß Lemming
-
Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum MFC mit dem Visual C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.