2014-06-19 17 views
16

Tôi đang cố gắng nhập openssl vào dự án nhanh chóng của mình, nhưng khi tôi thêm #import "ras.h" vào số xxx-Bridging-Header.h, tôi nhận được lỗi biên dịch bên dưới.lỗi biên dịch với khai báo con trỏ hàm

<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 '(' 

Các ras.h: 100 là:

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

Tôi cố định các lỗi bằng cách đổi tên các const BIGNUM *I-const BIGNUM *i. Có ai biết tại sao nhân vật I thật đặc biệt?

Tôi đã làm một thử nghiệm khác ngày hôm nay, kết quả trông rất kỳ quặc. Tôi đã tạo một dự án nhanh mới, đã viết 3 tệp tiêu đề:

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" 

Tôi đã gặp lỗi biên dịch một lần nữa!

cuối cùng, xóa "#import" làm mọi thứ ổn.

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

+0

này trông lẻ (chú ý thêm không gian ở giữa các chữ cái của OpenSSL): '.../OpenSSLRSAWrapper/o penssl/include/.. .'. – jww

+2

điều này trông giống như ai đó '#define I' ở đâu đó, bạn có thể kiểm tra kết quả từ bộ tiền xử lý để xem điều gì đã xảy ra –

+0

Chúng tôi có thể sử dụng' #undef I' để xóa định nghĩa. –

Trả lời

9

Vấn đề không được gắn với Swift. Nguyên nhân là do định nghĩa trước đây của I trong tệp /usr/include/complex.h (như Brian Chen đã đoán).

Sau đây là các dòng vi phạm báo cáo bởi trình biên dịch:

/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

Tôi đã gặp phải sự cố tương tự khi sử dụng openSSL trong một dự án nhanh chóng để xác minh biên lai mua hàng trong ứng dụng. Tôi cần phải bao gồm x509.h dẫn đến lỗi ở trên. Tôi là kinda mới cho sự phát triển toàn bộ iOS và tôi không chắc chắn whats cách chính xác để giải quyết vấn đề này? Có thể đổi tên I thành i trong rsa.h không? – Soko

+1

Có, điều này là đủ để khắc phục sự cố xây dựng. –

Các vấn đề liên quan