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?
Trả lời
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.
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
@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
- 1. Những nhược điểm của việc biên dịch JIT là gì?
- 2. không biên dịch nếu cờ bắt buộc không có mặt
- 3. việc sử dụng các JVM là gì nếu JIT là thực hiện bytecode chuyển đổi thành các lệnh máy
- 4. Làm cách nào để thêm biểu tượng vào tệp thực thi được biên dịch mingw-gcc?
- 5. Tệp thực thi có chứa những gì?
- 6. Các tác động của việc sử dụng mã không an toàn là gì
- 7. Tôi có thể sử dụng những gì cho các chủ đề Ruby, nếu chúng không thực sự song song?
- 8. Biên dịch cùng một tệp với các cờ khác nhau bằng cách sử dụng CMAKE
- 9. Tác động của WAITFOR đối với các quy trình và giao dịch khác là gì?
- 10. gcc được biên dịch với các kích thước khác nhau?
- 11. Việc sử dụng điểm mở rộng của Ant nếu/trừ các thuộc tính là gì?
- 12. Biên dịch Gcc "không thể tính hậu tố của tệp đối tượng: không thể biên dịch"
- 13. Các tác động của việc sử dụng giá trị GCGraceSeconds thấp trong Cassandra là gì?
- 14. Nhận các tùy chọn trình biên dịch từ tệp thực thi đã biên dịch?
- 15. Ưu tiên của các tệp được biên dịch bằng python trong nhập khẩu là gì?
- 16. Các tác động của việc có các lớp trùng lặp trong jar java là gì?
- 17. Các tác động của việc sử dụng bảo mật 'thấp' trong CakePHP là gì?
- 18. Làm thế nào tôi có thể ngừng gcc dưới Cygwin từ việc thêm ".exe" vào các tệp thực thi được biên dịch?
- 19. Sự khác nhau giữa các tham số gcc `-fpic` và` -fPIC` là gì?
- 20. Lợi thế của việc sử dụng Spring roo trên khung công tác chơi (nếu chúng ta sử dụng Spring framework)?
- 21. Caching các đối tượng regex được biên dịch bằng Python?
- 22. Có thể sử dụng các biểu tượng biên dịch có điều kiện trong các mẫu T4
- 23. #defined nếu trình biên dịch tuân thủ Cpp0x là gì?
- 24. Điều gì là sai với việc sử dụng offsetof này?
- 25. Các cờ PHP trong các đối số hàm là gì?
- 26. Các tác dụng phụ (nếu có) của nhiều $ (tài liệu) .ready() trong một trang HTML là gì?
- 27. Biên dịch ghc với hỗ trợ -fPIC
- 28. Các tác động bảo mật của việc sử dụng tăng/định dạng là gì?
- 29. Chế độ biên dịch tương tác trong các emacs? (điều gì sẽ xảy ra nếu trình biên dịch hỏi một câu hỏi)
- 30. Override biên dịch những lá cờ cho các tập tin đơn
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
@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