Sự khác biệt giữa các tham số gcc `-fpic` và` -fPIC` là gì?


96

Tôi đã đọc gcctrang chủ, nhưng tôi vẫn không thể hiểu sự khác biệt giữa -fpic-fPIC. Ai đó có thể giải thích nó, một cách rất đơn giản và rõ ràng?


Câu hỏi liên quan:


1
Có, câu trả lời không nằm trong man gccnhưng trong info gcc, có nhiều tài liệu hơn.
user2284570

Câu trả lời:


109

http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html

Sử dụng -fPIChoặc -fpicđể tạo mã vị trí độc lập. Việc sử dụng -fPIChay -fpictạo mã độc lập vị trí là tùy thuộc vào mục tiêu. Các -fPIClựa chọn luôn luôn làm việc, nhưng có thể sản xuất mã lớn hơn -fpic(mnenomic nhớ này là PIC là trong một vụ án lớn, vì vậy nó có thể sản xuất số lượng lớn của code). -fpicTùy chọn sử dụng thường tạo ra mã nhỏ hơn và nhanh hơn, nhưng sẽ có các giới hạn phụ thuộc vào nền tảng, chẳng hạn như số lượng các ký hiệu hiển thị trên toàn cầu hoặc kích thước của mã. Trình liên kết sẽ cho bạn biết liệu nó có phù hợp khi bạn tạo thư viện được chia sẻ hay không. Khi nghi ngờ, tôi chọn -fPIC, bởi vì nó luôn hoạt động.


33
Hơn nữa: Tôi đã thực hiện một thử nghiệm nhỏ ở đây (trên nền tảng x86_64) -fPIC-fpicdường như đã tạo ra cùng một mã. Có vẻ như họ chỉ tạo một mã khác trên m68k, PowerPC và SPARC.
Denilson Sá Maia

3
Một thử nghiệm với một phiên bản gcc được biên dịch theo một cách cho một số mục tiêu. Lấy kết quả đó như muối bỏ bể, mong đợi kết quả đó thay đổi theo thời gian, cụ thể là với một công cụ như GCC.
old_timer

Tôi có thể hỏi một câu được không; những biểu tượngthể nhìn thấy trên toàn cầu có nghĩa là gì?
Константин Ван

17

Từ trang hướng dẫn sử dụng Gcc :

Khi tạo mã cho các thư viện được chia sẻ, -fpic ngụ ý -msmall-data và -fPIC ngụ ý -mlarge-data.

Ở đâu:

 -msmall-data
 -mlarge-data
       When -mexplicit-relocs is in effect, static data is accessed via
       gp-relative relocations.  When -msmall-data is used, objects 8
       bytes long or smaller are placed in a small data area (the
       ".sdata" and ".sbss" sections) and are accessed via 16-bit
       relocations off of the $gp register.  This limits the size of the
       small data area to 64KB, but allows the variables to be directly
       accessed via a single instruction.

       The default is -mlarge-data.  With this option the data area is
       limited to just below 2GB.  Programs that require more than 2GB
       of data must use "malloc" or "mmap" to allocate the data in the
       heap instead of in the program's data segment.

       When generating code for shared libraries, -fpic implies
       -msmall-data and -fPIC implies -mlarge-data.

Trang hướng dẫn liên kết đã được cập nhật, hãy nhớ kiểm tra.
youfu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.