Mehrere libs in einer Dll zusammenfassen

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Stephan
Beiträge: 8
Registriert: 24.03.2002, 13:39
Kontaktdaten:

Mehrere libs in einer Dll zusammenfassen

Beitrag von Stephan »

Hi

Ich habe mehrere VS-Projekte die libs erstellen und eines, welches eine dll erstellt.
Meine Frage ist nun ob es eine Möglichkeit gibt die libs in das dll-Projekt zu importieren. Also so, das der Code der libs in der dll landet und auch die exportierten Funktionen übernommen werden? Im Endeffekt will ich also in einem Projekt, das alle libs und die dll braucht die libs nichtmehr einbinden müssen, da der Code ja in der dll vorhanden ist.

Hat jemand eine Idee ob sowas funktioniert?
Matthias Gubisch
Establishment
Beiträge: 472
Registriert: 01.03.2009, 19:09

Re: Mehrere libs in einer Dll zusammenfassen

Beitrag von Matthias Gubisch »

Ganz auf die schnelle:

functionen mit __declspec(dllexport) deklarieren
und die gesamten libs zur DLL linken

Damit sollte deine Anwendung spaeter nur noch die DLL einbinden muessen...

Sofern ich dich da jezt nicht falsch verstanden habe ;)
Bevor man den Kopf schüttelt, sollte man sich vergewissern einen zu haben
Stephan
Beiträge: 8
Registriert: 24.03.2002, 13:39
Kontaktdaten:

Re: Mehrere libs in einer Dll zusammenfassen

Beitrag von Stephan »

Hi
Ja. Genau so hab ich mir das auch gedacht. Wenn ich die dll allerdings mit dem DependencyWalker ansehe fehlen alle Funktionen aus der lib. Die dll ist praktisch identisch mit einer dll die ich ohne die lib Linke.
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Mehrere libs in einer Dll zusammenfassen

Beitrag von Krishty »

Dynamisch gelinkte Funktionen haben fast nur Nachteile gegenüber statisch gelinkten. Wozu die ganze Chose – nur aus Faulheit? In diesem Fall hat Visual C++ eine Funktion Link Library Dependencies, womit Libs automatisch gelinkt werden, falls deren Projekte in der Lösung als Abhängigkeit des aktuellen Projekts markiert sind.

Gruß, Ky
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Stephan
Beiträge: 8
Registriert: 24.03.2002, 13:39
Kontaktdaten:

Re: Mehrere libs in einer Dll zusammenfassen

Beitrag von Stephan »

Hi
Nein. Nicht aus Faulheit. Es geht darum, dass ich die gesamte Engine in einer Dll haben will, welche auch durch Updates ersetzt werden kann. Zusätzlich habe ich noch PlugIns, die dann die Version dieser Dll abfragen können um ihre Kompatibilität zu testen. (Manche PlugIns benötigen nur die Engine, können also unabhängig vom Hauptprogramm verwendet werden).
Soweit ich weis ist der einzige Nachteil einer Dynamischen Linkung der, das ein Funktionsaufruf in die Dll 1-2 Taktzyklen mehr braucht. Ansonsten sehe ich keine Nachteile (Sofern man das Programm nicht mutwillig killen will).
Die Funktion "Link Library Dependencies" kenn ich und verwend ich auch (Diesmal allerdings wirklich aus Faulheit ^^)
Grüße
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Mehrere libs in einer Dll zusammenfassen

Beitrag von Krishty »

Ah, okay – das klang nur erst so, als ob da jedes Fitzelchen dynamisch exportiert werden sollte.

Potentiell dumme Frage, aber: wird auch jede Deklaration, die aus der Lib übernommen werden soll – jetzt mit __declspec(dllexport) davor – tatsächlich in irgendeinem Modul der DLL geparst (also, von einer cpp #includet)? Wenn die Symbole nur in den Linker geschmissen werden ohne innerhalb der DLL deklariert zu werden, wird der Compiler sie ignorieren.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Stephan
Beiträge: 8
Registriert: 24.03.2002, 13:39
Kontaktdaten:

Re: Mehrere libs in einer Dll zusammenfassen

Beitrag von Stephan »

Argh...
Nein. Wird nicht geparst... Ist zwar in Headern eingebunden, diese sind aber nur für externe Verwendung bestimmt... Hab's jetzt noch in einer cpp-Datei Includiert. Nachdem ich noch ein paar Link-Errors gelöst habe sollte es jetzt funktionieren.
thx
Antworten