Da ich gerade mal wieder bisschen mit C++ anfange stehe ich gerade vor einem kleinen Problem.
Ich hab 2 Projekte, eine Bibliothek und eine Konsolenanwendung. Die Anwendung soll die Bibliothek vom anderen Projekt benutzen. Beide sind in einer Solution und die Bibliothek ist in den Abhängigkeiten der Anwendung.
Die Header findet er auch (nach dem ich ihm gesagt hab wo er sie findet) aber er scheint die dll nicht zu finden, weil der Linker mir immer Fehlermeldungen bei den Methoden meiner Lib ausgibt.
[edit]siehe Anhang[/edit] <- hab hier mal ein Minimalbeispiel hochgeladen
Das Projekt Lib stellt eine kleine Funktion bereit, die nach Debug/Lib.lib compiliert wird.
Das ganze wird vom Projekt App wieder eingebunden, indem in den Projekteigenschaften von App der Unterordner Lib zum Headersuchpfad hinzugefügt wurde (Konfigurationseigenschaften\C/C++\Zusätzliche Includeverzeichnisse)
Ebenso muss unter Linker\Zusätzliche Bibliotheksverzeichnisse das Debug Verzeichnis der Arbeitsmappe hinzugefügt werden (dorthin wird die Lib.lib kopiert).
Letztendlich habe ich unter Linker\Eingabe\Zusätzliche Abhängigkeiten noch “Lib.lib” eingetragen und schon konnte ich das Projekt App Compilieren und Linken (unter der Voraussetzung, dass Lib.lib schon erzeugt wurde).
Zum kompilieren brauchst Du immer die statische *.lib wenn Du die passende *.h includierst. Zum ausführen hingegen die *.dll, wenn Du Dein Programm später mal auslieferst.
Es gibt zwar auch Mechanismen um eine *.dll in eine Anwendung zu intigrieren ohne sie gegen die *.lib zu kompilieren, dann hast Du aber auch keine *.h dazu und musst quasi wissen was die *.dll mitbringt aber ich gehe mal davon aus Du willst eine Header Datei includieren und dessen Implementierung dann linken, dann siehe ersteres von meinem Post
Habe schon lange nicht mehr mit C++/C gearbeitet, aber wenn ich mich recht entsinne benötigt man zum Kompilieren immer nur die Header-Files und keine Lib… Den Rest macht ohnehin der Linker und diesem kann man angeben, ob dynamisch oder statisch gelinkt wird. Sehe ich das falsch?
Ja, zum kompilieren brauchst Du natürlich nur die *.h - files, richtig, aber zum linken brauchst Du die statischen .lib/lib.a - files. Zum ausführen Deiner Anwendung brauchst Du dann die dynamischen *.dll - files.
Das wäre der, gänginge, Vorgang des dynamischen linkens, d.h. man muss die *.dll immer mitliefern mit seinem Programm damit man es benutzen kann.
Beim statischen linken ändert sich am eigentlichen Kompilier- und Linkvorgang nix ausser das man dem Linker(gern auch dem Compiler der den Linker startet) mitteilt das er statisch linken soll (beim gcc: -static) und somit wird alles in seine Anwendung reingestrickt, was u.U. die ausführbare Datei der Anwendung immens aufbläht.
Und die lib in der sich die Klasse „SystemInformation“ weiß der Linker ganz sicher?
ChS, kennst mich also net persönlich, aber Gruß von ChW und AnM kann ich Dir ja sagen Glaub im java-forum wurdest Du schon von nem anderen Kollegen (OlH) belästigt Jaja, die Vergangenheit holt Dich immerwieder ein, Du kannst nicht flüchten
Btw: Danke fürs „Editor-Framework“ … :o)
Gut Schuß
VuuRWerK
P.S.: SeH: Wir brauchen keinen Bug-Tracker, wir brauchen nen Dreckbagger.