Wie entsteht ein "undefined reference"-Fehler in CMake?

Antwort

Ein "undefined reference"-Fehler in CMake-Projekten tritt auf, wenn beim Linken des Programms eine Funktion oder Variable verwendet wird, für die der Linker keine Definition findet. Das bedeutet, dass zwar eine Deklaration (z. B. ein Funktionsprototyp in einer Header-Datei) existiert, aber die eigentliche Implementierung (z. B. im Quellcode) nicht gefunden oder nicht eingebunden wurde. Typische Ursachen für "undefined reference" in CMake-Projekten: 1. **Quell- oder Objektdateien fehlen:** Die Datei mit der Implementierung wurde nicht zu den zu kompilierenden Quellen hinzugefügt. Beispiel: ```cmake add_executable(meinprog main.cpp) # foo.cpp fehlt! ``` 2. **Falsche oder fehlende Verlinkung von Bibliotheken:** Externe oder eigene Bibliotheken werden nicht mit `target_link_libraries` eingebunden. Beispiel: ```cmake target_link_libraries(meinprog meinebibliothek) ``` 3. **Falsche Reihenfolge beim Linken:** Bei manchen Compilern ist die Reihenfolge der Bibliotheken beim Linken relevant. 4. **Namenskonflikte oder Tippfehler:** Die Funktion ist anders benannt oder falsch deklariert. 5. **Unterschied zwischen C und C++ (Name Mangling):** Wenn C++-Code C-Funktionen einbindet, muss `extern "C"` verwendet werden. **Zusammengefasst:** Der Fehler entsteht, weil der Linker eine Referenz auf eine Funktion oder Variable nicht auflösen kann. In CMake-Projekten liegt das meist daran, dass Quell- oder Bibliotheksdateien nicht korrekt eingebunden wurden. Überprüfe, ob alle benötigten Dateien und Bibliotheken in der CMake-Konfiguration angegeben sind. Weitere Infos zu CMake: [https://cmake.org/](https://cmake.org/)

KI fragen