2010-06-29 25 views
6

Gần đây tôi đã cập nhật lên iPhone SDK 4.0 và không còn có thể xây dựng dự án của tôi cho trình giả lập iPhone. Vấn đề là các lớp học của một trong những thư viện của riêng tôi không còn có thể được tìm thấy bằng cách ld:Lỗi trình kết nối (chỉ giả lập) với thư viện riêng sau khi cập nhật lên iPhone SDK 4.0

"_OBJC_CLASS_$_Book", referenced from: 
    objc-class-ref-to-Book in Category.o 
    (maybe you meant: ...) 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

Tôi đã đọc một số bài viết khác về vấn đề tương tự, như ví dụ here. "Thật không may", vấn đề của tôi không liên quan gì đến khung SDK, nhưng với lib của riêng tôi, vì vậy các giải pháp được đề cập không có ở đây.

Thư viện được bao gồm trong "Liên kết nhị phân với thư viện" của đường dẫn tìm kiếm thư viện của tôi là chính xác (đã kiểm tra điều này bằng XCode và với trình soạn thảo văn bản thuần túy trực tiếp trong tệp dự án của tôi) và được thêm chính xác vào lệnh gcc.

Tôi đang sử dụng iPhone Simulator 3.2 làm SDK cơ sở nhưng vấn đề tương tự cũng xảy ra với SDK 4.0. Một lần nữa, điều này làm việc với mục tiêu thiết bị của tôi nhưng không phải với mục tiêu giả lập của tôi. Nó làm việc với cả hai, tuy nhiên, trước khi tôi cập nhật từ iPhone SDK 3.2 đến 4.0. Tôi cũng có thể tạo lại lỗi này bằng cách tạo một dự án mới chỉ với một tệp và lib được liên kết. Tuy nhiên, lib sẽ không sao vì nó hoạt động với trình mô phỏng 3.2 trước khi tôi cập nhật XCode và SDK của mình.

More Sự kiện: Mac OS X 10.6.3, XCode 3.2.3 64-Bit, iPhone OS 3.2, GCC 4.2

Bất kỳ trợ giúp sẽ được đánh giá cao.


CHỈNH SỬA:

Sau khi cài đặt lại SDK 3.2, mọi thứ hoạt động như mong đợi một lần nữa. Cần lưu ý rằng SDK trong thư mục /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs được ghi đè bằng mỗi lần cài đặt. Sau đó tôi đã cố gắng cài đặt lại SDK 4.0 một lần nữa và lỗi tương tự như trên xảy ra. Tôi đã không thay đổi bất cứ điều gì trong dự án của tôi và luôn luôn sử dụng 3.2 như Base SDK.

Vấn đề do đó có thể có thể được thu hẹp xuống các tùy chọn sau:

  • Apple thay đổi sth. trong SDK mô phỏng 3.2 gây ra sự cố
  • thay đổi trong XCode 3.2.3 gây ra sự cố sai/thiếu cờ trình biên dịch trong khi xây dựng thư viện của riêng tôi (những lá cờ đó, sẽ chỉ gây ra sự cố với SDK đã thay đổi hoặc IDE đã thay đổi)

Tôi cũng đã làm một thư mục khác biệt trên /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.2.sdk cho cả phiên bản cũ và mới của thư mục này. Hóa ra là có những thay đổi nhỏ trong SDK "giống nhau". Tôi vẫn nghĩ rằng đó là một vấn đề cờ IDE/trình biên dịch, mặc dù.

Bất kỳ ai có ý tưởng nào? Tôi không muốn dính vào 3.2 mãi mãi ...

+0

Tôi gặp sự cố tương tự. Bí ẩn nó chỉ xảy ra cho "Release" nhưng cũng không phải cho "Debug" xây dựng, eventhough tôi đã không thay đổi bất cứ điều gì sau khi cập nhật lên SDK 4.0. Tuy nhiên, tôi chưa xem xét điều này thêm nữa. – Stiefel

Trả lời

1

Cuối cùng tôi đã có thể tìm ra những lá cờ nào bị thiếu trong trình biên dịch của tôi để xây dựng lib của tôi. Vì vậy, để trả lời câu hỏi của tôi: Nếu có ai có vấn đề liên kết/lib riêng của mình với một mục tiêu trong XCode 3.2.3 (sử dụng iPhoneSimulator3.2.sdk hoặc iPhoneSimulator4.0.sdk), bạn cần phải xây dựng lib của bạn với hai lá cờ sau:

-fobjc-abi-version = 2

-fobjc-legacy-văn

Cảm ơn một lần nữa để PhoneyDeveloper cho his hints.

1

Đảm bảo rằng bạn biên dịch lại các thư viện của mình bằng cùng một SDK cơ sở như bạn đang sử dụng cho ứng dụng của mình.

+0

Cảm ơn câu trả lời của bạn. Tôi sử dụng cùng một SDK cơ sở, do đó, điều đó dường như không phải là vấn đề. Như đã đề xuất trong diễn đàn khác (http://forums.macrumors.com/showthread.php?t=956090), tôi đã xây dựng lib của mình bằng XCode thay vì dòng lệnh và nó hoạt động. Mặc dù sau đó tôi đã sử dụng cùng một cờ gcc với cả dòng lệnh và XCode, lib được tạo thủ công vẫn không hoạt động với ứng dụng của tôi ... – Flo

0

Một suy nghĩ khác - điều này đã xảy ra với tôi trong quá khứ ngay cả khi các thư viện không phải là tham gia.

Kiểm tra kỹ xem bạn chưa nhập tệp bằng tùy chọn 'tham chiếu thư mục nhóm' hay chưa. Dường như điều này làm cho Xcode đau đầu. (Ít nhất nó đã làm trong trường hợp của tôi.)

0

tôi đã giải quyết vấn đề này khi tôi xóa cờ như (-ObjC, -all_load) trong 'Các Cờ Liên kết Khác' mà tôi đang sử dụng trong dự án. .

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