C-Code kompiliert mit C ++: undefinierten Bezugs
-
26-09-2019 - |
Frage
habe ich ein kleines Programm, dass ich mit GCC und ICC ohne Schwierigkeiten zusammenstellen kann, aber ich mag auch den Code der Arbeit mit G ++ und ICPC. Ich habe versucht, diese hinzuzufügen:
#ifdef __cplusplus
extern "C" {
#endif
am Anfang und folgt aus:
#ifdef __cplusplus
}
#endif
am Ende aller Header-Dateien, aber ich habe noch einige `undefined reference bekommen„...“‘ Fehler.
Lösung
Ich glaube, Sie bekommen es falsch ... Die extern C zum Deaktivieren der Funktion ist Mangeln; so, wenn Sie es nur für die Header-Dateien zu tun, wenn Sie versuchen, Ihren verstümmelten Objektcode zu verknüpfen, die deklarierten Funktionsnamen nicht mit den Funktionsnamen in der Objektdatei entsprechen.
Wie auch immer, die extern C jede Portabilität nicht hinzufügen, wenn die gesamte Anwendung mit dem gleichen C ++ Compiler kompiliert und verknüpft wird, ist es für das Mischen C-Bibliotheken mit C ++ Code bestimmt wird.
Wenn Sie den Code in der gemeinsamen Teilmenge von C und C ++, sollten Sie bereits in der Lage sein, es mit jedem Compiler zu kompilieren, aber ich kann nicht sehen, den Grund, das zu tun (außer arbeiten nach dem Prinzip der geringstenen Überraschung, wie C ++ ist strenger mit einigen Dingen).
Andere Tipps
Sie erhalten undefinierte Referenzen, weil die Deklaration und die Definition passen nicht, wenn Sie extern "C"
setzen, die verhindert Mangeln Namen geschieht aber in diesem Fall geschieht dies nur in der Header-Dateien
Wenn einer der undefinierten Referenzen gxx_personality ist, dann würde ich die Post sagt von „Fortran“ korrekt ist.
Sehen Sie meine Antwort auf diese Frage von vorhin: Wenn extern verwenden " C“in einfachen Worten?
Es sollte hoffentlich deutlich machen, wie C und C ++ Code zu mischen.