Khi tôi thử chạy Dự án Xcode của mình, nó không thành công với lỗi thông báo rằng tôi có các ký hiệu trùng lặp. Tôi đã tìm kiếm trực tuyến nơi tìm thấy các bản sao này nhưng không gặp may:
Bất kỳ ý tưởng làm thế nào để sửa lỗi này?
Khi tôi thử chạy Dự án Xcode của mình, nó không thành công với lỗi thông báo rằng tôi có các ký hiệu trùng lặp. Tôi đã tìm kiếm trực tuyến nơi tìm thấy các bản sao này nhưng không gặp may:
Bất kỳ ý tưởng làm thế nào để sửa lỗi này?
Câu trả lời:
Đối với tôi, nó đã giúp chuyển cài đặt trình biên dịch "Không có khối chung" thành KHÔNG: Có vẻ khá hợp lý, cài đặt này được giải thích ở đây: GCC_NO_COMMON_BLOCKS được sử dụng để làm gì?
Sử dụng Xcode 8, tùy chọn "Cập nhật dự án lên cài đặt được đề xuất" đã BẬT 'Không có Khối chung' cho dự án của tôi.
Chuyển nó trở lại TẮT đã khắc phục mọi thứ.
Đối với tôi, do nhầm lẫn tôi đã nhập tệp dưới dạng .m không phải .h
Tôi đã làm lộn xộn các nhóm của mình trong khi hạ cấp một nhóm và tôi đã cố gắng giải quyết vấn đề với các ký hiệu trùng lặp cho kiến trúc arm64 bằng cách xóa các nhóm và cài đặt lại chúng bằng:
pod deintegrate
pod install
Một giải pháp khác là:
Chọn Dự án -> Mục tiêu -> Giai đoạn xây dựng -> Biên dịch mã nguồn -> tìm kiếm tệp được đề cập trong dòng lỗi cuối cùng thứ 3 (Trong trường hợp của bạn là BFAppLinkReturnToRefererView.o ).
Sau đó, bạn sẽ thấy 1 hoặc 2 tệp trong kết quả tìm kiếm.
Loại bỏ một trong số chúng và biên dịch lại . Nó sẽ được biên dịch lại ngay bây giờ vì chỉ còn lại một tệp và không còn xung đột để xây dựng.
Nếu điều đó không hiệu quả, tệp có thể có lỗi trong đó và bạn nên xóa tất cả chúng rồi biên dịch lại. Nó sẽ hoạt động trở lại.
Khi nâng cấp lên Xcode 8, tôi nhận được thông báo nâng cấp lên các cài đặt được đề xuất. Tôi đã chấp nhận và mọi thứ đã được cập nhật. Tôi bắt đầu gặp vấn đề về thời gian biên dịch:
Biểu tượng trùng lặp cho XXXX Biểu tượng trùng lặp cho XXXX Biểu tượng trùng lặp cho XXXX
Tổng cộng có 143 lỗi. Đã đến Mục tiêu-> Cài đặt xây dựng -> Không có Khối chung -> Đặt thành KHÔNG. Điều này đã giải quyết vấn đề. Vấn đề là các dự án tích hợp có chung các khối mã và do đó không thể biên dịch nó. Giải thích có thể được tìm thấy ở đây .
Lỗi này xảy ra khi Trình liên kết đang cố gắng liên kết các tệp obj. Một vài lý do mà tôi có thể nghĩ ra cho lỗi này là:
Hàm / Lớp trùng lặp được định nghĩa ở hai vị trí / tệp khác nhau trong dự án và chỉ một trong số chúng được cho là biên dịch cho bất kỳ biến thể nào của lệnh xây dựng. Nhưng bằng cách nào đó cả hai tệp đó đều được biên dịch trong dự án của bạn. Vì vậy, bạn cần kiểm tra các điều kiện if-else hoặc các phụ thuộc khác để thêm các tệp src vào danh sách các tệp cần được biên dịch và xóa tệp không cần thiết cho lệnh xây dựng cụ thể của bạn.
Chức năng / Lớp trùng lặp được xác định vô tình tại hai vị trí / tệp khác nhau trong dự án. Bỏ định nghĩa sai.
Làm sạch thư mục OBJ của bạn trước khi bạn xây dựng lại, có thể có một số tệp obj cũ trong đó từ các bản dựng trước của bạn có thể gây ra xung đột này.
Tái bút tôi không phải là chuyên gia, nhưng đây là cách tôi giải quyết vấn đề này khi tôi phải đối mặt với nó. :)
Nếu bạn đang chuyển sang Xcode 7 hoặc 8 và đang mở một dự án thực sự cũ, tôi đã gặp sự cố này:
trong SomeConstFile.h
NSString * const kAConstant;
trong SomeConstFile.m
NSString *const kAConstant = @"a constant";
Các phiên bản trước của trình biên dịch giả định rằng định nghĩa trong tệp tiêu đề là không rõ ràng và do đó, bao gồm SomeConstFile.h ở khắp nơi là tốt.
Bây giờ bạn cần phải khai báo rõ ràng những khuyết điểm này là extern:
trong SomeConstFile.h
extern NSString * const kAConstant;
Dưới đây Patch làm việc cho tôi .. :)
Step 1: Go to TARGETS -> Build Settings -> No Common Blocks -> No
Step 2: Go to TARGETS -> Build Settings -> enable testability -> No
Đặt nó trở lại NO đã giải quyết được vấn đề!
Chà, đôi khi sử dụng SDK như FB hoặc các Thư viện như Vuforia hoặc GoogleAnalytics, việc thêm các dự án mẫu có thể gây ra sự cố rằng chúng đã bao gồm các Khung công tác và như vậy, vì vậy bạn phải đảm bảo không lặp lại các ký hiệu bạn thêm theo cách thủ công khi chúng đã có bao gồm trong các mẫu
Đối với tôi, vấn đề là kiểu tạo const, hoạt động tốt cho đến iOS8 này .. Tôi có một vài dòng như sau:
int const kView_LayoutCount = 3;
trong tệp .h của tôi. Sáu dòng như vậy dẫn đến 636 tệp trình liên kết sau khi các khối chung được đặt thành KHÔNG. (14k + nếu CÓ). Đã chuyển các dòng thành .m sau khi loại bỏ .h của khai báo giá trị và biên dịch là tốt.
Hy vọng điều này sẽ giúp những người khác!
Trong trường hợp của tôi, lý do quá ngu ngốc:
Tôi đã có một tệp Constant.h nơi tôi đã xác định các macro. Tôi đã nghĩ đến việc làm NSString ở đó. và đã làm điều này:
NSString const *kGreenColor = @"#00C34E";
điều này gây ra sự cố trùng lặp biểu tượng cho kiến trúc arm64 và lệnh Trình liên kết không thành công với mã thoát 1. Loại bỏ dòng const NSString đã làm việc cho tôi.
kiểm tra tệp bao gồm của bạn, tôi gặp sự cố này vì tôi đã vô tình #imported "filename.m" thay vì "filename.h", tính năng tự động sửa (tab) đặt "m" không phải "h".
Từ các lỗi, nó sẽ xuất hiện bất kỳ Lớp nào xuất hiện nhiều lần. Tìm và xóa các Lớp đó nó sẽ hoạt động.
Đang tạo tệp AppDelegate.h và .m tạo nhiều lần. Vì vậy, lỗi này sẽ xảy ra.Cuối cùng, tìm và loại bỏ các lớp mà nó hoạt động tốt đối với tôi.
để giải quyết vấn đề này, hãy chuyển đến giai đoạn Xây dựng và tìm kiếm về tệp trùng lặp như (facebookSDK, Uniformads) và xóa (tệp mở rộng.o) sau đó xây dựng lại.
Đối với tôi, tôi đã tạo một phương thức được gọi sampleMethod
trong ViewController_A và cũng tạo phương thức tương tự trong ViewController_B, Nó gây ra cho tôi lỗi này, sau đó tôi đã thay đổi tên phương thức trong ViewController_B thànhsecondSampleMethod
. Nó đã sửa lỗi.
Có vẻ như một tính năng Tốt để giảm mã và không để trùng mã ở nhiều nơi.
Tôi đã thử thay đổi các khối Không chung từ Có thành Không, sau đó bật khả năng kiểm tra từ Có thành Không. Nó không hoạt động. Tôi cũng đã kiểm tra các tệp trùng lặp trong các giai đoạn xây dựng, nhưng không có tệp nào trùng lặp.
Tôi gặp sự cố này vì tôi đã lười biếng xác định một biến trong .m của mình bên ngoài một phương thức, sau đó trong một tệp .m khác, tôi đang xác định một biến khác có cùng tên bên ngoài một phương thức. Điều này đã gây ra sự cố trùng lặp tên biến toàn cầu.
Tôi đã có thể giải quyết lỗi này cho biết "158 ký hiệu trùng lặp cho kiến trúc armv7, 158 ký hiệu trùng lặp cho kiến trúc arm64" --- Nếu đây là những gì bạn cũng nhận được, thì có nghĩa là bạn đang cố gắng biên dịch một tệp đang nhập hoặc kế thừa một khung hoặc thư viện tĩnh có tham chiếu đến mã hoặc tệp C ++. Một cách dễ dàng để xử lý điều này là thay đổi phần mở rộng của tệp .m của bạn thành .mm. Đây là cách nó được xử lý nếu bạn đang sử dụng Objective C, nhưng không chắc chắn về Swift.
Cũng trong cài đặt bản dựng của bạn - bạn có thể cập nhật "cờ trình liên kết khác" thành -lc ++
Làm ơn Thay đổi cài đặt.
Bước 1: Đi tới MỤC TIÊU -> Cài đặt xây dựng -> Không có khối chung -> Không
Bước 2: Vào TARGETS -> Build Settings -> bật khả năng kiểm tra -> Không