2014-06-19 15 views
16

Próbuję zaimportować openssl do mojego szybkiego projektu, ale kiedy dodaję #import "ras.h" w xxx-Bridging-Header.h, otrzymałem poniżej błąd kompilacji.Błąd kompilacji z deklaracją wskaźnika funkcji

<unknown>:0: error: /Users/wenyun/workspace/newsvn/newios/ios/VanJoyPay2/VanJoyPay2/opensource/OpenSSLRSAWrapper/openssl/include/openssl/rsa.h:100: expected ')' 
<unknown>:0: note: /Users/wenyun/workspace/newsvn/newios/ios/VanJoyPay2/VanJoyPay2/opensource/OpenSSLRSAWrapper/o penssl/include/openssl/rsa.h:100: to match this '(' 

The ras.h: 100 jest:

int (*rsa_mod_exp)(BIGNUM *r0,const BIGNUM *I,RSA *rsa,BN_CTX *ctx); /* Can be null */ 

Naprawiłem błąd przez zmianę nazwy const BIGNUM *I do const BIGNUM *i. Czy ktokolwiek wie, dlaczego ta postać jest tak wyjątkowa?

Zrobiłem kolejny test dzisiaj, wynik wygląda tak dziwnie. stworzyłem nowy projekt szybkiego napisał 3 pliki nagłówka:

test.h 
int test(char *I); 

test2.h 
#import "test3.h" 
#import <Foundation/Foundation.h> 

test3.h 
int test3(); 


xxx-Bridging-Header.h 
#import "test2.h" 
#import "test.h" 

Dostałem błąd kompilacji ponownie!

w końcu usunięcie "#import" sprawia, że ​​wszystko jest w porządku.

Why the character "I" could not work together with #import <xxx>?

+0

To wygląda dziwnie (Zawiadomienie dodatkową przestrzeń pomiędzy liter OpenSSL): '.../OpenSSLRSAWrapper/o penssl/include/.. . ". – jww

+2

to wygląda jak ktoś '#define I' gdzieś, możesz sprawdzić wynik z preprocesora, aby zobaczyć, co się stało –

+0

Możemy użyć' #undef I', aby usunąć definicję. –

Odpowiedz

9

Problemem nie jest przywiązany do Swift. Jest to spowodowane wcześniejszą definicją I w pliku /usr/include/complex.h (jak to sobie wyobraził Brian Chen).

Oto linie obrażając zgłaszane przez kompilator:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.1.sdk/usr/include/complex.h:42:11: note: expanded from macro 'I' 
#define I _Complex_I 
+0

Wpadłem na ten sam problem, używając openSSL w szybkim projekcie, aby zweryfikować potwierdzenie zakupu w aplikacji. Muszę dołączyć x509.h, co prowadzi do powyższego błędu. Jestem trochę nowy w całym rozwoju iOS i nie jestem pewien, jaki jest właściwy sposób rozwiązania tego problemu? Czy można zmienić nazwę I na i w rsa.h? – Soko

+1

Tak, powinno to wystarczyć, aby naprawić problem z budową. –

Powiązane problemy