2017-10-25 1 views
0

In einer (Konsolen-) Anwendung in C++ entwickelt, ich muss eine Framework.dll, die wir entwickelt haben, eine neue Funktion hinzufügen. Diese neue Funktion im Framework verwendet Klassen einer statischen Bibliothek, die uns zur Verfügung gestellt wird.Verwenden Sie eine statische Bibliothek in einer DLL

Ich verband die statische lib zu unserem Framework, und alles hat gut funktioniert. Dann begann ich, den Framework-Code zu bearbeiten, um eine Klasse der statischen Bibliothek zu verwenden. Das Framework wird immer noch ohne Warnung erstellt. Wenn die Hauptanwendung (die Framwork.dll verwendet) ausgeführt wird, wird die App nicht gestartet. Es wird kein Ereignis zum main() gehen. Es sperrt eine leere Eingabeaufforderung und wartet endlos.

Wenn ich die statische lib direkt in die Anwendung einbinden, bekomme ich kein Problem. Aber das ist nicht wo ich es benutzen möchte.

Hat jemand eine Idee von dem, was ich falsch mache?

+0

Vielleicht ist das Problem nicht mit der statischen Bibliothek verwandt. Benutzt du aVast? Wenn dies der Fall ist, deaktivieren Sie es und versuchen Sie es erneut. – drescherjm

+0

Für mich versuchen Sie, das gleiche wie https://stackoverflow.com/questions/31446363/proper-way-to-link-static-libraries-with-dll – sandwood

+0

Ja das ist es. Und im Grunde ist das, was ich tue, d. H. Die .lib in mein DLL-Projekt einbinden. Wenn ich das nicht getan hätte, würde das DLL-Projekt sowieso nicht aufbauen (wegen nicht aufgelöster Äußerlichkeiten). – NonoxX

Antwort

0

Dank Hans Passant, ging ich zum debug obwohl die DllMain. Und ja, es war eine Sackgasse. Das Problem war nicht direkt mit der Verwendung einer statischen Bibliothek in der DLL verbunden.

In der statischen Bibliothek habe ich einige statische Singletons, die in die CRTDLLmain initialisiert werden. Ich folge dem doppelt überprüften Sperrmuster in meiner Implementierung mit C++ - Atomzäunen (wie in http://preshing.com/20130930/double-checked-locking-is-fixed-in-cpp11/). Es scheint jedoch, dass es mit C++ 11 (https://github.com/weidai11/cryptopp/issues/372) nicht wirklich gut funktioniert. Ich habe einen schnellen Workaround programmiert, um es zu testen und es scheint so. Ich werde dann den lib maker kontaktieren, um zu sehen, ob eine feste Version möglich ist.

Verwandte Themen