2013-04-30 29 views
5

Tôi đang cố gắng liên kết trong tất cả các ký hiệu không được tham chiếu từ một vài thư viện tĩnh (thư viện của riêng tôi) cho ứng dụng xcode x ++ của tôi. Tôi đã thử tất cả các thuộc tính liên quan đến 'dải' (bằng cách tìm kiếm thuộc tính cho 'dải'), nhưng các ký hiệu không được tham chiếu, các lớp cụ thể, không được liên kết.làm thế nào để vô hiệu hóa mã C++ chết tước trong xcode

Tôi cũng đã thử cờ liên kết -r, nhưng sau đó mối liên kết chỉ phàn nàn với: 'ld: -r và -dead_strip không thể được sử dụng cùng'

tôi đã thử thêm '-no_dead_strip' để những lá cờ mối liên kết, nhưng sau đó các mối liên kết chỉ nói với tôi '-no_dead_strip' bị bỏ qua.

Tôi nhận được kết quả tương tự với cả 'Apple LLVM' và 'LLVM GCC'. Vì vậy, câu hỏi của tôi là: những gì cờ liên kết (s) hoặc tài sản mục tiêu tôi nên sử dụng để tắt tất cả các mã chết tước và lực lượng các lớp học không được quan tâm để được liên kết trong?.

+0

Có thể thử cờ liên kết '--whole-archive'? –

+0

NDK của Android bao gồm trong 'keo tự nhiên' của nó (thư viện tĩnh) một hàm trống gọi là 'app_dummy()' không có triển khai thực hiện. Gọi điều này từ phía máy khách (liên kết với thư viện được đề cập) dường như ngăn chặn việc tước các biểu tượng trong đơn vị biên dịch đó. Tôi đang tìm kiếm một phương pháp thanh lịch hơn, nhưng dường như không có gì. – pauluss86

Trả lời

6

Cơ chế liên kết tiêu chuẩn - tức là sử dụng tùy chọn -l để liên kết tệp .a sẽ lọc ra các tệp đối tượng không được sử dụng một cách thông minh, vì vậy lý do tại sao các ký hiệu không có trong nhị phân kết quả là chúng không thực sự được liên kết.

Nếu bạn muốn nhận tất cả các biểu tượng từ một bản lưu trữ, bạn có thể sử dụng cờ: -force_load libraryarchive, được sử dụng như: -Wl,-force_load,libfoobar.a trong đó libfoobar.a là bản lưu trữ mà bạn muốn nhận tất cả các ký hiệu.

Để có được tất cả những biểu tượng từ tất cả các tài liệu lưu trữ, bạn nên sử dụng lá cờ mối liên kết: -all_load, hoặc nếu bạn đang lái xe nó từ gcc/clang cờ -Wl,-all_load.

Nó tạo ra các bảng biểu tượng ghê gớm!

+1

Với 'Tước mã chết' == Không và 'Không in-in chết và các điều khoản' == Có, nó không hoạt động. Nhưng khi tôi thêm cờ liên kết '-all_load', mọi thứ hoạt động hoàn hảo. Cảm ơn!! –

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