Fehler „undefinierte Symbole“ der Inline-Funktion

Lesezeit: 2 Minuten

Benutzer-Avatar
Benutzer1297301

Ich möchte eine Inline-Funktion schreiben, bekomme aber eine Fehlermeldung. Wie kann ich es reparieren?

Fehlerinformationen:

Undefined symbols for architecture i386:
  "_XYInRect", referenced from:
      -[BeginAnimation ccTouchesEnded:withEvent:] in BeginAnimation.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Code:

CGPoint location = CGPointMake(60, 350);

if (XYInRect(location, 53, 338, 263, 369)) {

}

inline BOOL XYInRect(CGPoint location, float MixX, float MixY, float MaxX ,float MaxY){
    if (location.x >MixX && location.y >MixY && location.x <MaxX && location.y <MaxY) {
        return YES;
    } else {
        return NO;

    }
}

  • Keine Antwort, aber können Sie nicht einfach CGRectContainsPoint verwenden, anstatt Ihren eigenen zu rollen?

    – Jrturton

    20. April 2012 um 8:57 Uhr

  • Das Kompilieren mit dem -O2-Optimierungsschalter hat bei mir funktioniert, wie in StackOverflow.com/questions/18939482/… und einer anderen Frage vorgeschlagen, die ich nicht mehr finden kann.

    – Devon

    29. Dezember 2017 um 2:06 Uhr


Benutzer-Avatar
Christoph

Klirren standardmäßig auf C99 und nicht GNU-Sematikwas roh bedeutet inline unterscheidet sich von beiden static inline und extern inline.

Insbesondere ein rohes inline bedeutet, dass die Funktion immer noch eine externe Verknüpfung hat, aber die Inline-Definition die externe nicht bereitstellt (Sie müssten extern inline dafür).

Dies bedeutet, dass Sie eine zusätzliche benötigen extern Definition in einer anderen Übersetzungseinheit oder das Verlinken schlägt fehl. Allerdings suchen Sie wahrscheinlich static inline.

  • Beachten Sie, dass zum Zeitpunkt der Veröffentlichung von XCode 8.1 (2016-10-27) die Standardsprache für (Apples Veröffentlichung von) clang war nicht mehr C99, sondern C11. GCC 5.0 und höher ist ebenfalls standardmäßig C11 (aber zuvor standardmäßig C90). Dies ist nur ein kleines Detail; es hat keinen Einfluss auf den Rest der Antwort.

    – Jonathan Leffler

    28. Oktober 2016 um 4:04 Uhr


Ich finde XYInRect() muss vor der Verwendung bekannt sein. Verschieben Sie die Funktionsdefinition an eine Stelle in der Datei, bevor Sie sie aufrufen.

1363960cookie-checkFehler „undefinierte Symbole“ der Inline-Funktion

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy