2009-07-22 11 views
10

Tôi đang đặt cùng một makefile cho một dự án tôi đang làm việc trên. Tôi có một tập tin thực thi và một thư viện được chia sẻ trong dự án. Cả hai đều sử dụng một số tệp nguồn giống nhau được biên dịch riêng thành tệp đối tượng. Để có thể sử dụng các đối tượng này trong thư viện được chia sẻ, tôi cần sử dụng cờ -fPIC (mã vị trí độc lập) trong gcc. Có bất kỳ tác động nào của việc biên dịch các đối tượng với -fPIC được sử dụng trong một tệp thực thi không?Điều gì, nếu có, là những tác động của việc biên dịch các đối tượng với cờ gcc -fPIC nếu chúng được sử dụng trong các tệp thực thi?

+0

Dường như GCC7 hiện yêu cầu mọi thứ được biên dịch bằng -fPIC. Ít nhất tôi nhận được lỗi n và tìm thấy câu hỏi này trong việc tìm kiếm lý do tại sao tôi nhận được lỗi? – Lothar

+0

@Lothar Không, nó không yêu cầu nó nói chung. Bạn đang trộn các đối tượng được biên dịch có và không có '-fPIC'? – ephemient

Trả lời

9

Biên dịch mã độc lập vị trí khi không cần thiết là kéo hiệu suất trên một số nền tảng (đáng chú ý nhất là kiến ​​trúc x86 bị ​​bỏ đăng ký, vì PIC lấy đi một thanh ghi có thể được sử dụng tự do hơn khi không có PIC), nhưng ở đó không nên có tác động bất lợi nào khác.

Tiếp tục, thậm chí có thể tạo một tệp thực thi độc lập với vị trí (-fPIE) được xây dựng từ mã độc lập với vị trí.

Điều đó đang được nói, libtool có thể tự động tạo cả hai đối tượng PIC và non-PIC cho mỗi tệp nguồn bạn biên dịch và dễ dàng thực hiện tương tự ngay cả trong hệ thống xây dựng mà không tích hợp libtool.

+0

Không PIC không lấy đi một đăng ký trên x86. CPU này không có mã gián tiếp vị trí và do đó luôn bổ sung thêm một số không cho dữ liệu/hàm. Bạn có thể quên về -fPIC hoàn toàn trên x86 bởi vì nếu bạn không chỉ định nó, bạn nhận được mã nhanh và liên kết trùng lặp đoạn mã cho mỗi tệp thực thi. – Lothar

+0

@Lothar Trên x86-32, tùy thuộc vào trình biên dịch, PIC sẽ lấy đi một thanh ghi. GCC trước 5.0 dự trữ '% ebx', làm cho nó không có sẵn để sử dụng chung. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54232 – ephemient

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