Ich habe eine alte .a
-Bibliothek namens BULib
mit einem Makro NEW_API
in der GCC_PREPROCESSOR_DEFINITIONS
des Bibliotheksziels definiert. Dieses Makro wird innerhalb der Lib verwendet, um einige Methoden in den Headern oder nicht mit bedingter Kompilierung verfügbar zu machen. Beispiel:Library-Präprozessormakros nicht im Consumer-Projekt gefunden
#ifdef NEW_API
+ (nullable NSString *)user;
#endif
Das Problem tritt auf, wenn diese Bibliothek in einem Projekt verwendet wird. Als ich
[BULib user];
verwenden möchten erhalte ich einen Fehler zur Kompilierzeit
keine bekannte Klassenmethode für Selektor ‚getUser‘
Das Problem ist gelöst, wenn ich NEW_API
im GCC_PREPROCESSOR_DEFINITIONS
hinzufügen des Projekts, dann kann ich das Symbol verwenden und es funktioniert wie erwartet.
Vielleicht missverstehe ich die Verwendung der Makros zwischen Bibliotheken und Consumer-Projekt, aber ich will dieses Verhalten nicht.
Warum muss ich das Makro im Consumer-Projekt festlegen, wenn die Lib korrekt mit dem Makrosatz kompiliert wurde? Wenn dies nicht der Weg ist, um das zu erreichen, was ist das?
Vielen Dank.
Können Sie angeben, welche der genannten Code-Teile in welcher Datei vorkommen? Ich vermute, dass der API-Header für Ihre Lib sie oder einen Teil von ihnen enthält. Wenn die Lib bestimmte Funktionen definiert, aber der Header nur Deklarationen für sie bereitstellt, falls der Schalter definiert ist .... dann brauchen Sie den Schalter. Ich weiß, dass [mcve] mit der lib nicht einfach ist, aber versuche, mehr Informationen "herum" zu geben als deine Code-Zitate, bitte etwas von "** M ** fast ** C ** notreally ** VE **". – Yunnosch