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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top