Ich habe eine Bibliothek, die eine Inline-C-Funktion verwendet, und kompiliert gerade gut. Wenn eine andere Bibliothek diese Bibliothek referenziert, wird sie trotzdem kompiliert. Wenn jedoch eine tatsächliche Anwendung auf die Bibliothek verweist, kann sie nicht kompiliert werden, da das Symbol _functionNameHere (ja, Funktionsname, das mit Unterstrich beginnt) - nicht gefunden wird.Ziel C: Inline-Funktion - Symbol nicht gefunden
Wenn ich den Inline-Spezifizierer entferne, wird alles gut kompiliert. Solange eine Funktion innerhalb der Bibliothek eingebunden ist, kann die App nicht kompiliert werden!
Irgendwelche Ideen, warum das ist?
Ich weiß ziemlich viel über Compiler, aber ich bin neu im Objective-C, und alles, was ich darüber weiß, ist nichts weiter als fundierte Vermutungen. Und selbst auf diese Weise kann ich mir keinen Grund vorstellen, dass es sich so verhält.
Die Sache ist, die Inline-Funktion ist INLINE, was bedeutet, dass es kein Symbol gibt, es wird inline kompiliert, wo auch immer es heißt, und die referenzierende App sollte nicht einmal wissen, dass es jemals existiert hat. Das ist wahr, solange die Inline-Funktion immer Inline-fähig ist und für die Bibliothek privat ist, und es gibt keine spezielle Compiler-Konfiguration, die das Inlining verhindert, und all dies ist wahr.
So jemand bitte kommen und mit dem Finger auf, was ich tue/denken falsch ...
Danke :-)
Arrix - ich testete nur auf das, was Sie hier erklärt. Wenn ich 'inline double radians (double degrees) hinzufüge {Rückgabegrade * M_PI/180; } 'an den Anfang einer ViewController.m-Datei rufen Sie dann radians() in einer Methode in dieser Datei, bekomme ich den Linker-Fehler, obwohl ich meine Konfiguration auf Release eingestellt habe. Sicher in diesem Fall ist die Funktion inline und so das statische Schlüsselwort ist nicht notwendig? – Brynjar