2013-06-24 27 views
6

Tôi có một biểu tượng đang được tham chiếu trong mục tiêu thư viện động Xcode, nhưng nó không được xác định ở đó. Tôi CẦN biểu tượng này không được xác định. Điều này là bởi vì nó sẽ được biên dịch khác nhau trong mỗi quá trình bao gồm nó (dựa trên một số thời gian biên dịch định nghĩa).Bỏ qua biểu tượng không xác định trong thư viện động từ Xcode

Mục tiêu thư viện động trong Xcode không liên kết vì nó chứa tham chiếu đến biểu tượng này (không bất ngờ), nhưng tôi biết rằng biểu tượng sẽ có sẵn vào thời gian chạy. Tôi sẽ biên dịch hàm này thành từng mục tiêu mà thư viện chung được liên kết đến.

Tôi đang cố gắng làm cho trình liên kết đánh dấu biểu tượng cụ thể này để tra cứu động tại thời gian chạy.

Tôi đã có thể làm cho nó liên kết nếu tôi chỉ định "dynamic_lookup được xác định trước" làm một trong các "Cờ liên kết khác" trong dự án Xcode của tôi. Vấn đề là tôi không muốn đi xa đến vậy. Tôi biết rằng chỉ có 1 biểu tượng được cho là không xác định. Tôi muốn tất cả các phần còn lại của các biểu tượng để tạo ra lỗi nếu chúng được để lại như undefined (tôi muốn tránh một thời gian chạy thiếu biểu tượng lỗi cơ bản).

Tôi tìm thấy một tùy chọn mối liên kết ld mà dường như nó nên làm những gì tôi cần (từ trang người đàn ông ld):

-U symbol_name 
      Specified that it is ok for symbol_name to have no definition. With -two_levelnamespace, the resulting symbol will be marked dynamic_lookup which means dyld will search all loaded images. 

Tuy nhiên, tôi dường như không thể có được nó để làm việc. Bất cứ khi nào tôi chỉ định "-U symbolName" hoặc "-UsymbolName" trong "Flags Linker khác" Tôi vẫn đang chào đón với lỗi mối liên kết này:

Undefined symbols for architecture x86_64: 
    "_symbolName", referenced from: <various object files> 

Tôi có sử dụng -U sai có lẽ? Nó không thực sự là lựa chọn tôi cần, hay nó không hoạt động như nó được cho là quá?

+0

Liệu không '--unresolved-ký tự = bỏ qua-all' công việc cho bạn? – devnull

+1

@devnull Tôi đã không thử điều đó, nhưng tôi có hành vi tương đương (bỏ qua tất cả các ký hiệu đã giải quyết) từ "dynamic_lookup được xác định trước". Vấn đề là, đi về phía trước tôi không muốn tất cả các biểu tượng không xác định bị bỏ qua. Tôi chỉ muốn một người bỏ qua. Tôi không muốn phớt lờ tất cả bọn họ chỉ để lờ nó đi. –

+0

Tôi có thể sai, nhưng bạn không nên chỉ định '-U _symbolName'? –

Trả lời

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