GCC -fPIC オプション 質問する

GCC -fPIC オプション 質問する

私は読んだGCC のコード生成規約のオプションですが、「位置独立コード (PIC) を生成する」とはどういうことなのか理解できませんでした。例を挙げて、それが何を意味するのか説明してください。

ベストアンサー1

位置独立コードとは、生成されたマシン コードが動作するために特定のアドレスに配置される必要がないことを意味します。

たとえば、ジャンプは絶対的ではなく相対的に生成されます。

疑似アセンブリ:

PIC: コードがアドレス100でも1000でも動作します

100: COMPARE REG1, REG2
101: JUMP_IF_EQUAL CURRENT+10
...
111: NOP

非PIC: コードがアドレス100にある場合にのみ機能します

100: COMPARE REG1, REG2
101: JUMP_IF_EQUAL 111
...
111: NOP

編集: コメントへの返信です。

コードが -fPIC でコンパイルされている場合、そのコードはライブラリに組み込むのに適しています。ライブラリはメモリ内の優先位置から別のアドレスに再配置できる必要があります。ライブラリが優先するアドレスに、すでにロードされている別のライブラリが存在する可能性があります。

おすすめ記事