2015-08-04 16 views
22

Tôi đang hoàn tất thư viện CometD mã nguồn mở C, tôi nghĩ rằng nên mở nó cho người dùng OSX/iOS, như tôi.Ký hiệu không xác định cho kiến ​​trúc x86_64 trên Xcode 6.3

Để giảm bớt công việc cho nhà phát triển OSX/iOS, tôi muốn chuyển từ thư viện C tĩnh sang Xcode iOS Static Libary. Vì vậy, tôi đã làm theo lời khuyên tìm thấy trên mạng, và tạo ra một thư viện tương thích iOS tĩnh.

Vấn đề là, mỗi lần khi tôi đang cố gắng sử dụng nó, tôi nhận được một lỗi kiểu:

ký Không xác định cho kiến ​​trúc x86_64: ******, tham chiếu từ: - ********** trong *******. a (*******. o)

Lỗi này được lặp lại cho hầu hết mọi hàm C mà tôi có trong thư viện của tôi.

Đầu tiên tôi nghĩ có thể thư viện không phải là x86_64 compatible, trống hoặc thực sự không có bất kỳ biểu tượng x86_64 nào trong đó.

Vì vậy, tôi đã kiểm tra với một "lipo -info" trên thư viện và đây là câu trả lời:

enter image description here

Để thực sự chắc chắn tôi cũng sử dụng "nm -arch x86_64" trên thư viện, và đã tìm nạp một số chức năng chưa được xác định do Xcode báo cáo là lỗi. Tôi nghĩ rằng tôi sẽ sai và không tìm thấy gì ngoài đoán cái gì?

tôi thấy những biểu tượng: enter image description here

enter image description here

Vì vậy, câu hỏi của tôi là:

Nếu những biểu tượng có mặt trong một thư viện tương thích x86_64, tại sao Xcode khiến lỗi này? Ngay cả khi tôi biên dịch thư viện cho tất cả các loại */s cánh tay, tôi vẫn nhận được lỗi x86_64 này.

Tôi không biết điều gì đó hay tôi chỉ làm sai?

Câu trả lời của bạn luôn được đánh giá cao.

Cập nhật (Đây là liên kết để dự án Xcode): https://github.com/GhostGumm/CometD-x86_64-issue

Cập nhật 2: Ông Trojanfoe thu hút sự chú ý của tôi trên một Cảnh báo liên kết tôi đã khi biên dịch. Thật vậy, mối liên kết dường như bỏ lỡ tải thư viện tìm kiếm một thư mục không tồn tại. Sau khi di chuyển thư viện vào đúng thư mục, liên kết nó theo cách thủ công, lỗi x86_64 biến mất.

Rất tiếc, sự cố vẫn xảy ra. Ngay sau khi một bộ sưu tập thành công, tôi đã cố gắng để sử dụng lib, nhưng, khi tôi "alloc" và "init" class chính của tôi như vậy:

ZetaFactory *Client = [[ZetaFactory alloc] init]; 

Các lỗi x86_64 trở lại gầm với khốc liệt chính hãng của một tỷ mặt trời. Tôi đã đăng liên kết tới dự án Xcode, vui lòng thử nghiệm nó vì tôi không có thêm ý tưởng nào về cách khắc phục, nhưng quan trọng hơn là tại sao và nơi này bị lỗi.

Không ít tôi sẽ tiếp tục điều tra.

+1

Câu hỏi được đặt ra, với rất nhiều nỗ lực được hiển thị. Để làm rõ, bạn đang xây dựng cho Trình mô phỏng iOS, phải không? – trojanfoe

+0

Simulator có, nhưng cũng cho Thiết bị trong lần thứ hai. –

+0

OK, do đó, khả năng duy nhất là bạn không thực sự liên kết với thư viện tĩnh đó. Kiểm tra dòng lệnh của trình liên kết trong tab xây dựng và đảm bảo rằng nó sử dụng các giá trị chính xác cho '-L' và' -l'. – trojanfoe

Trả lời

3

Tôi đã tải xuống và cố gắng xây dựng dự án của bạn. Nhìn vào các lỗi liên kết - init_stack_remove_data không tìm thấy, ví dụ - chúng đúng. Không có định nghĩa về init_stack_remove_data ở bất kỳ đâu trong nguồn dự án của bạn.

Trong đầu ra "nm -arch x86_64" mà bạn trích dẫn ở trên, hãy lưu ý rằng "U" trước định nghĩa hàm cho biết sử dụng của hàm đó, chứ không phải định nghĩa của nó. Đầu ra nm cho thấy rằng trình liên kết là chính xác - những hàm này được gọi bởi mã của bạn, nhưng không bao giờ được xác định. Khi chúng được xác định, bạn sẽ thấy "T" trước hàm trong đầu ra nm.

Bạn cần cập nhật dự án của mình bằng phần còn lại của nguồn cần thiết trước khi nó sẽ liên kết mà không có lỗi.

+0

Tôi không ở nhà trong một vài tuần, tôi sẽ cập nhật ngay khi tôi tiếp cận Máy tính Mac hoặc tại nhà. Tôi sẽ cập nhật Câu hỏi cũng như với một kho lưu trữ sạch hơn. –

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