Visual Studio C++ 2022; Funktion kann im Release-Modus nicht gelinkt werden



  • Solche Fragen kann man in einem Forum eigentlich nicht stellen, da es darauf selten eine vernünftige Antwort gibt bzw. man wird mit Antworten verschiedenster Art überschwemmt.

    Also hier mal proaktiv einen Sachverhalt, der erst nach langen Probieren zu einer Lösung führte.

    Ich habe eine freie Funktion mit einer Enumeration als Parameter und einem std::string als Rückgabewert in einer Datei "X.h" in einem Namespace deklariert und definiert; keine Probleme beim kompilieren und debuggen (_DEBUG).

    Ich verschiebe die Deklaration in Datei "Y.h" und die Definition in "Y.cpp" (gleicher Namespace); keine Probleme beim kompilieren und debuggen (_DEBUG).

    Ich komme auf die Idee, jetzt mal alles im Release-Modus zu kompilieren, und die Funktion kann nicht gelinkt werden!😕

    Was mir nicht so richtig auffiel, wenn ich von der Deklaration mit "F12" (gehe zur Definition) zur Definition springen wollte, wurde ich über eine Anzeige mit zwei Dateien (einmal Datei "X.h" und einmal "Y.cpp") zur Auswahl gefragt, zu welcher Definition verzweigt werden soll. Dass kannte ich schon bei überschriebenen virtuellen Methoden. Ist in der Nachbetrachtung aber schon ein Hinweis.

    Ich versuche alles mögliche, von umbenennen des Funktionsnamens bis zum Ändern des Rückgabewertes. Kein Erfolg! Nur wenn ich den Typ des Übergabeparameters änderte, wurde die jetzt aber sinnlose Funktion gelinkt.

    Vor lauter Frust beendete ich die Arbeit (Visual Studio runter gefahren). Nach einem neuen Neustart kompilierte und linkte Visual Studio auf einmal alles im Release-Modus!?🤔

    Nur wurde im Editor die Funktion jetzt "grün unterkringelt" was auf "nicht definiert" hinweist, und es wurde die Definition auch nicht mit "F12" (gehe zur Definition) gefunden. Es kompilierte und linkte zwar alles, aber es ließ mir keine Ruhe.

    Ich hatte IntelliSence im Verdacht, weil diese Funktionalität (vermute ich) für solche Sachen wie "F12" (gehe zur Definition) zuständig ist und recherchierte nach "visual studio intellisense cache löschen" und wurde fündig:

    Die Lösung ist, den ".vs"-Ordner zu löschen.

    Manchmal sitzt halt nicht, wie meist, das Problem vor dem Bildschirm 😁 .

    Edit: Rechtschreibfehler



  • @Helmut-Jakoby Ich habe immer mal wieder Fälle, bei denen das Linken nach Änderungen im Code fehlschlägt. Sobald ich aber die ganze Solution neu baue, funktioniert alles einwandfrei. Meine Vermutung war immer, dass irgendwas gecached wird und der Compiler / Linker nicht mitbekommt, das sich was geändert hat und daher nicht alles richtig neu compiliert und gelinkt wird.



  • @Helmut-Jakoby sagte in Visual Studio C++ 2022; Funktion kann im Release-Modus nicht gelinkt werden:

    Manchmal sitzt halt nicht, wie meist, das Problem vor dem Bildschirm .

    Es ist die Bequemlichkeits-Funktionalität. Der Cache mag die Platte und Dein Zeitgefühl schonen, kann aber nicht alle Änderungen am Quellcode abdecken. Der Qt-Creator zeigt hin & wieder ähnliches Verhalten.
    Das Projekt komplett neu bauen hilft da, eben weil der Cache gelöscht wird. Und weil wir alle keine Zeit mehr haben, reichen uns die 99,8% der Fälle, wo der Cache gut ist.


Anmelden zum Antworten