Ít nhất là trên Linux và Solaris, các thư viện tĩnh thực sự chỉ là một bó được biên dịch .o được đưa vào một tệp lớn. Khi biên dịch một thư viện tĩnh, thường cờ -fpic được ommited, do đó, mã được tạo ra phụ thuộc vào vị trí.Liên kết thư viện được chia sẻ với thư viện tĩnh: thư viện tĩnh có được biên dịch khác với một ứng dụng đang liên kết nó không?
Bây giờ hãy nói thư viện tĩnh của tôi là B. Tôi đã xây dựng nó và có tệp .a thực sự là một tập hợp tất cả các tệp .o phụ thuộc vào vị trí. Bây giờ tôi có một thư viện chia sẻ tôi muốn xây dựng, A, và tôi muốn nó liên kết tĩnh B. Khi tôi xây dựng A, tự nhiên tôi sẽ sử dụng cờ -fpic để làm cho vị trí mã được tạo ra độc lập. Nhưng nếu tôi liên kết với B, tôi có đang trộn vị trí phụ thuộc và vị trí các tệp đối tượng độc lập không?
Tôi nhận được rất nhiều lỗi di chuyển văn bản trừ khi tôi cũng chỉ định văn bản -mimpure và tôi nghĩ đây có thể là nguyên nhân. Dường như khi tôi biên dịch một thư viện, tôi thực sự cần biên dịch nó lần, một phiên bản được chia sẻ, một phiên bản tĩnh và một phiên bản tĩnh-có-thể-được-dùng-chia-libs. Tôi có đúng không? Tôi chỉ có thể tiếp tục sử dụng văn bản -mimpure nhưng trang g ++ man nói rằng nếu bạn làm điều đó đối tượng không thực sự kết thúc được chia sẻ (nó không rõ ràng nếu nó là tất cả unshared hoặc chỉ các phần liên kết tĩnh mặc dù, không ai biết?) .
Câu hỏi được nêu chính xác, anh ta bỏ qua ''-fpic' trong đoạn đầu tiên, dẫn đến mã phụ thuộc vào vị trí, sau đó sử dụng nó trong đoạn thứ hai, dẫn đến mã vị trí độc lập. –