2013-05-28 33 views
5

Tôi đang phát triển một ứng dụng iOS phức tạp hợp lý. Để hợp lý hoá phát triển, tôi đã bắt đầu phát triển từng mô-đun như một dự án độc lập, sau đó được tổng hợp cùng nhau trong dự án Ứng dụng cấp cao nhất, dẫn đến một cây phụ thuộc.Làm cách nào để quản lý cây phụ thuộc có chứa phụ thuộc trùng lặp? (XCode, iOS)

tôi đã lấy phương pháp này thành công trước đó, nhưng lần này có một sự phụ thuộc chia sẻ (C) gây ra một vấn đề:

 A 
    /|\ 
/| \ 
    B C D 
/\  \ 
C E  C 

đâu A là dự án ứng dụng cấp cao nhất, và C là một ' Chức năng của Thư viện lõi. Thư viện lõi này là sự phụ thuộc của bản thân A, cũng như các mô-đun B và D. Sự kết hợp nhiều lần gây ra các biểu tượng trùng lặp trong thư mục xây dựng và liên kết không thành công.

Bây giờ, tôi có thể thực dụng và chỉ loại bỏ tham chiếu từ A, vì điều này sẽ được B biên soạn vào thư mục build và nếu D không tham gia thì điều này sẽ hoạt động. Nhưng làm thế nào để tôi đi về giải quyết sự sao chép của C phụ thuộc từ B và D? Các dự án B và D vẫn cần tham chiếu đến C khi tôi biên dịch chúng độc lập, nhưng có một xung đột khi được biên dịch hai lần trong ngữ cảnh A.

Tôi có thể tưởng tượng một số giải pháp phức tạp bằng cách sử dụng objcopy và cho chúng tiền tố duy nhất , nhưng điều này sẽ hơi không hiệu quả vì đó là cùng một mã. Tôi có thể sống với điều này, nhưng có cách nào tốt hơn không? Có lẽ một số trình biên dịch hoặc liên kết cờ để tái sử dụng một biểu tượng hiện có trong thư mục xây dựng nếu một tồn tại, thay vì biên dịch một lần nữa?

Cảm ơn lời khuyên nào.

+0

Về mặt kỹ thuật, đây là câu hỏi giống như: http://stackoverflow.com/questions/11784917/how-do-i-resolve-avoid-duplicate-symbols-in-common-transitive-xcode-dependencies . .. nhưng nó chưa được trả lời đầy đủ. –

+0

Tôi không thể thấy vấn đề, một thư viện tĩnh, khi được xây dựng không liên kết với các thư viện khác nhưng cho thấy sự phụ thuộc chỉ được giải quyết khi thư viện đó được liên kết với một tệp thực thi. Trong trường hợp của bạn "A". Dường như B, C, D, E KHÔNG phải là các thư viện tĩnh, nếu không câu hỏi của bạn sẽ không có ý nghĩa. – Till

+0

@Till: "một thư viện tĩnh, khi được xây dựng không liên kết với các thư viện khác". Vâng, đúng vậy, đó chính xác là vấn đề! Dù sao, tôi đã giải quyết vấn đề này bằng cách bỏ qua một cách rõ ràng giai đoạn liên kết cho các mục tiêu bên dưới cấp cao nhất, sau đó kết quả là hành vi mà bạn mô tả. –

Trả lời

0

Các giải pháp mà làm việc tốt nhất cho tôi là có hai mục tiêu trong từng dự án mô-đun: <TargetName> và một Tôi gọi <TargetName> -NoLink.

Hai mục tiêu này giống hệt nhau, ngoại trừ giai đoạn liên kết bị bỏ qua trong -NoLink. Do đó, chỉ có các tệp trung gian .o được tạo và bản dựng có thể tiến tới tất cả các dự án gốc, cuối cùng là được liên kết với tất cả các mô-đun.

Mục tiêu liên kết <TargetName> hài cốt, giữ lại sự linh hoạt để liên kết tất cả phụ thuộc vào bất cứ thời điểm nào trong cây, sản xuất một độc .a tập tin cho bất kỳ mô-đun.

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