57 Stimmen

GCC-Stil schwache Verknüpfung in Visual Studio?

GCC hat die Fähigkeit, ein Symbol schwach über __attribute__((weak)) zu verknüpfen. Ich möchte ein schwaches Symbol in einer statischen Bibliothek verwenden, das Benutzer in ihrer Anwendung überschreiben können. Ein GCC-Stil schwaches Symbol würde es mir ermöglichen, das zu tun, aber ich weiß nicht, ob es mit Visual Studio gemacht werden kann.

Bietet Visual Studio eine ähnliche Funktion?

1 Stimmen

Siehe Windows-Statikbibliothek mit Standardfunktionen. Ist das das, was Sie erreichen möchten?

0 Stimmen

Siehe die Antwort von Michael Burr - MSVC verwendet tatsächlich standardmäßig dieses Verhalten. Wenn Sie ein Symbol überschreiben, das bereits in einer Abhängigkeitsbibliothek definiert ist, wird das Symbol in der .lib stillschweigend ignoriert.

0 Stimmen

VC++ bietet keine explizite Möglichkeit, Symbole als schwach zu deklarieren - aber es gibt zwei Alternativen, die nahe kommen. Überprüfen: ofekshilon.com/2014/02/10/linker-weak-symbols

2voto

Es gibt kein MS-VC-Äquivalent zu diesem Attribut. Siehe http://connect.microsoft.com/VisualStudio/feedback/details/505028/add-weak-function-references-for-visual-c-c. Ich werde etwas Schreckliches vorschlagen: Lesen Sie den Zweck hier: http://www.kolpackov.net/pipermail/notes/2004-March/000006.html, und zwar im Wesentlichen, um Funktionen zu definieren, die verwendet werden, wenn ihre Symbole existieren, andernfalls nicht, also...

Warum nicht Preprozessor für diesen Zweck verwenden, mit dem großen Vorbehalt "falls Sie dies überhaupt tun müssen"? (Ich bin kein Fan der Empfehlung von Preprozessor).

Beispiel:

#ifdef USE_MY_FUNCTION
     extern void function();
#endif

rufen Sie dann entsprechend in der Anwendungslogik auf, umgeben von #ifdef Anweisungen. Wenn Ihre statische Bibliothek eingebunden ist, passen Sie im Rahmen des Einbindungsprozesses die Definitionen an, um USE_MY_FUNCTION zu definieren.

Nicht ganz ein direktes Äquivalent und sehr hässlich, aber es ist das Beste, woran ich denken kann.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X