Tôi đã đọc gcc
trang chủ, nhưng tôi vẫn không thể hiểu sự khác biệt giữa -fpic
và -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:
Tôi đã đọc gcc
trang chủ, nhưng tôi vẫn không thể hiểu sự khác biệt giữa -fpic
và -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:
Câu trả lời:
http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
Sử dụng -fPIC
hoặc -fpic
để tạo mã vị trí độc lập. Việc sử dụng -fPIC
hay -fpic
tạo mã độc lập vị trí là tùy thuộc vào mục tiêu. Các -fPIC
lự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). -fpic
Tù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.
-fPIC
và -fpic
dườ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.
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.
man gcc
nhưng tronginfo gcc
, có nhiều tài liệu hơn.