2010-03-29 17 views
10

Tôi nhận được lỗi sau trong Xcode 3.2.1 trên Snow Leopard 10.6.2 bất cứ khi nào tôi cố gắng biên dịch bất kỳ ứng dụng iPhone nào được tạo bởi Appcelerator's Titanium. Tuy nhiên, lỗi xây dựng chỉ xuất hiện khi tôi chọn trình giả lập iPhone trên menu kiến ​​trúc và nếu tôi chọn thiết bị iPhone, tôi có thể chạy ứng dụng trên thiết bị của mình.Xcode biểu tượng trùng lặp _main

Hơn nữa, trình mô phỏng iPhone khởi chạy thành công và thực thi chương trình trực tiếp từ môi trường Titanium, sử dụng Xcode để xây dựng.

Tại sao điều này lại xảy ra?

ld: duplicate symbol _main in Resources/libTitanium.a(main.o) and /Users/prithviraj/Documents/project/Final/build/iphone/build/Final.build/Debug-iphonesimulator/Final.build/Objects-normal/i386/main.o collect2: ld returned 1 exit status Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1

Trả lời

19

Tôi không thể cho bạn biết lý do tại sao điều này xảy ra, nhưng tôi có thể đề nghị một cách giải quyết. Khi tôi nhận xét toàn bộ nội dung của tệp main.m được tạo cho dự án Titan của tôi, tôi đã có thể biên dịch thành công và chạy trên Trình mô phỏng. Hãy cho tôi biết nếu điều đó phù hợp với bạn.

+3

Làm rõ, lý do tại sao bạn thấy lỗi là libTitanium, tệp thư viện Titanium chính, chứa một điểm vào 'main' và do đó dự phòng cho hàm' main' trong main.m. Tôi không chắc chắn lý do tại sao vấn đề này không cắt lên ở nơi khác, nhưng nó phải là một cái gì đó với cách trình biên dịch được gọi bởi Titanium, để móc vào điểm nhập của họ thay vì một trong main.m. – warrenm

+0

Cảm ơn warren, Nó hoạt động :) –

+2

Trong trường hợp của tôi, một thư viện tôi đang sử dụng có main.m. Nhận xét ra và nó làm việc –

11

Kiểm tra xem bạn có nhiều khai báo chức năng chính trong dự án của mình hay không.

8

Tôi vừa dành một vài giờ chiến đấu với trò chơi này. Đó là vì tôi đã sử dụng cờ liên kết -all_load. Nếu bạn đang sử dụng cờ đó để vượt qua lỗi danh mục, có một số giải pháp khác - xem here.

+0

http://stackoverflow.com/questions/932856/calling-method-on-category-included-from-iphone-static-library-causes-nsinvalidar, liên kết đề xuất sử dụng -ObjC. – AechoLiu

+1

Đây là nguyên nhân trong một dự án của chúng tôi. Đó là một dự án cũ hơn nơi -all_load đang được sử dụng và chúng tôi vừa liên kết một thư viện mới. Kết quả là hơn 200 lần sao chép. Đang xóa -all_load đã sửa nó. –

+0

Tôi yêu bạn. cảm ơn – DanMoore

0

Tôi thấy điều này xảy ra khi tôi có tệp triển khai có chức năng chính trong đó (nói abc.m) và cũng có một số khác main.m. Khi tôi nhận xét chức năng chính trong abc.m, dự án đã được biên dịch thành công.

6

Tôi gặp sự cố tương tự. Một lớp kiểm tra đơn vị đã vô tình được bao gồm trong bản dựng của tôi. Nếu bạn tìm kiếm dự án của bạn cho "chính (" có thể bạn sẽ tìm thấy các chức năng trùng lặp

+0

Cùng một vấn đề. Cảm ơn bạn đã đề cập đến tệp kiểm tra đơn vị! – nonamelive

+0

Giờ! tôi đã dành hàng giờ! Một lần nữa, cảm ơn vì đã đề cập đến main.c –

1

này xảy ra với tôi trong 2 lý do:.

1: Class A gọi lớp B và cả hai đã nhập khẩu cùng lớp. Khắc phục sự cố bằng cách nhập lớp trong tệp .m

2: Hai lớp có hằng số có cùng tên (ngay cả khi hằng số được xác định trong tệp .m). Hãy sửa bằng cách thay đổi tên của các hằng số.

0

Dường như có nhiều cách để đi vào trạng thái này.Môi khác biệt.Tôi đã đọc gợi ý nơi bạn có thể kéo từ một sự kiện .xib selec tor vào việc thực hiện .h của bộ điều khiển xem của bạn và nó sẽ tự động gen phương pháp của bạn. Nó đã làm - đó là mát mẻ. Tôi ngay lập tức bắt đầu nhận được các lỗi biểu tượng trùng lặp - mà không phải là mát mẻ.

Tôi không có thời gian đào sâu vào trình liên kết để xem điều gì đã xảy ra. Tôi tạo ra một bộ điều khiển xem mới, sao chép bối cảnh của .xib cũ của tôi vào chàng mới. Đã xóa cũ .h, .m và .xib và được xây dựng và nó hoạt động trở lại. Rất lãng phí, rất khó chịu thời gian lãng phí.

Rõ ràng là có một số lỗi với "tiện lợi" xcode này.

0

Dựa vào những gì tôi có thể kể từ những câu trả lời khác này, tôi sẽ cần phải xóa một loạt các phương pháp main.

Tuy nhiên, để làm được điều đó một cách dễ dàng đầu tiên tôi cần phải loại bỏ tất cả các ý kiến ​​gd từ các tập tin của tôi bởi vì họ đang cần mẫn ghi nhận với ý kiến ​​tại hầu hết các dòng khác

biểu thức chính quy này phù hợp với tất cả nhiều dòng C Các bình luận bao gồm delimeters của họ & có thể giúp bạn trên hành trình của bạn

/\*((?!\*/).)*\*/ 
0

tôi có vấn đề này vì tôi xác định một tập tin như vậy:

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 
... 
} 

Và cũng có một tệp main.m:

int main(int argc, char* argv[]) 
{ 
    @autoreleasepool { 
     int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate"); 
     return retVal; 
    } 
} 
0

Tôi đã dành hơn một giờ để tìm kiếm câu trả lời đúng nhưng không có gì hiệu quả đối với tôi. Cuối cùng xcode nó tự nói với một cái gì đó được nhân đôi, do đó, đi đến thư mục cụ thể (trong trường hợp này: /Users/prithviraj/Documents/project/Final/build/iphone/build/Final.build/Debug-iphonesimulator/Final.build /Objects-normal/i386/main.o) và xóa tất cả các tập tin và cũng kiểm tra tương tự trong dự án của bạn cho dù lớp/giao diện cụ thể được khai báo hai lần nếu có xóa nó.

Sau khi xóa sạch sẽ và chạy dự án.

Nó làm việc cho tôi hy vọng điều này sẽ giúp (-_-).

-1

Xóa thư mục /Users/{username}/Library/Developer/Xcode/DerivedData và tạo lại.