Tôi đang sử dụng thư viện C++ có thể được xây dựng dưới dạng thư viện được chia sẻ hoặc thư viện tĩnh. Thư viện này sử dụng kỹ thuật nhà máy, nơi các đối tượng tĩnh tự đăng ký khi chương trình bắt đầu và các đối tượng tĩnh được tạo.Cách buộc gcc liên kết các đối tượng C++ tĩnh, không được hỗ trợ từ thư viện
Tính năng này hoạt động miễn là thư viện dùng chung được sử dụng. Khi phiên bản tĩnh được sử dụng, không có đối tượng tĩnh nào được đưa vào chương trình cuối cùng (vì chúng không được tham chiếu trực tiếp) và do đó chức năng của chúng không có sẵn.
Có cách nào để buộc gcc bao gồm tất cả các đối tượng tĩnh từ thư viện khi liên kết không?
Thư viện là Nguồn mở và tôi có thể sửa đổi nó, nếu điều đó có ích.
-Wl, - toàn bộ lưu trữ khiến nhiều biểu tượng được đưa vào đã được các thư viện khác đưa vào hoặc một số không thể giải quyết được. Có cách nào tốt hơn để đưa các con mồi vào bao gồm các số liệu thống kê không? –
Điều này không có ý nghĩa Gene: nó giống như tải một thư viện được chia sẻ: bạn nhận được toàn bộ thư viện và không có gì khác. Phải thừa nhận rằng ld có khái niệm sai lầm về việc tìm kiếm các tham chiếu bên ngoài, vì vậy bạn cần có thứ tự đúng đắn. – Yttrill
Tắt hành vi bằng '-Wl, - không lưu trữ toàn bộ 'thực sự không phải là tùy chọn, ngay cả khi bạn không có thêm thư viện nào để đưa vào. GCC sẽ thêm tất cả thư viện hệ thống chuẩn vào cuối lệnh của bạn, vì vậy nếu bạn để '--whole-archive' trên tất cả chúng sẽ bị ảnh hưởng bởi nó và nó sẽ gây ra vấn đề biểu tượng trùng lặp @GeneVincent đã nhận xét về –