Ich habe eine Anwendung und mehrere Plugins in DLL-Dateien. Die Plugins verwenden Symbole aus der Anwendung über eine Exportbibliothek. Die Anwendung verbindet sich in mehreren statischen Bibliotheken und hier stammen die meisten Symbole. Dies funktioniert gut, solange die Anwendung ein Symbol verwendet. Wenn das Symbol dort nicht verwendet wird, erhalte ich Linker-Fehler beim Kompilieren der DLL.Forcing Symbol Export mit MSVC
Wie kann ich den Export der Symbole erzwingen, die nur in den Plugins verwendet werden?
Um den Export zu triggern ich so etwas wie dies versucht haben:
class MyClassExporter
{
MyClass mInstance;
public:
MyClassExporter() {}
};
static MyClassExporter TheMyClassExporter;
in einem der statischen Libs die Anwendung zu zwingen, den Export hergestellt, die nicht funktioniert hat.
Als Antwort auf Greg (danke für die Antwort) und um zu verdeutlichen: Die Klasse, für die ich den Export erzwingen möchte, ist MyClass (welches __declspec (...) definiert hat, abhängig davon, ob ich exportieren oder importieren möchte) . MyClassExport war mein Versuch, die Aufnahme von (in Bezug auf die Anwendung) unbenutzten Symbolen in die App zu erzwingen. Ich möchte die Symbole "anfassen", damit der Linker sie als gebraucht erkennt und in die Anwendung einfügt, damit sie diese wiederum in meine Plugins exportieren kann. Das Verknüpfen der statischen Bibliotheken in den Plugins ist keine Option, da sie Singletons enthalten, die dupliziert werden würden (App und DLLs haben jeweils ihre eigene Kopie statischer Variablen).
Ich muss aus den statischen Bibliotheken und den Export in die Plugins importieren, weil ich Singletons in ihnen haben, die dupliziert bekommen würde, wenn ich sie in das DLL verknüpfen würde (DLLs und App ihre eigene statische Variablen). Dein erster Satz erklärt das Problem: Ich suche nach einer Möglichkeit, die Aufnahme zu erzwingen. – torque