Inline function "undefined symbols" error
c, compiler-errors, inline, linker-errors, objective-c
Solution
Clang defaults to C99 and not GNU sematics, which means a raw `inline` is different from both `static inline` and `extern inline`.
In particular, a raw `inline` means that the function still has external linkage, but the inline definition does not provide the external one (you'd need `extern inline` for that).
What this means is that you need an additional `extern` definition in a different translation unit or linking will fail. However, you're probably looking for `static inline`.
Problem
I want to write an inline function, but I get an error. How can I fix it? Error information: ``` 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; } } ```