2017-04-27 4 views
0

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.

+0

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

Antwort

0

Es gibt mehrere mögliche Lösungen:

  1. NEW_API in GCC_PREPROCESSOR_DEFINITIONS hinzufügen wie du
  2. löschen #ifdef NEW_API und #end
  3. Verwenden #define NEW_API vor dem Import Libs header
  4. + (nullable NSString *)user; hinzufügen und andere fehlende Methoden in BULib 's Kategorie

Persönlich bevorzuge ich 3. Option. Es wird etwas in der Art sein:

#define NEW_API 
#import <bulib.h> 
+0

Sorry, können Sie die Option # 3 etwas mehr erklären? Vielen Dank! – emenegro

Verwandte Themen