1. ホーム
  2. c++

[解決済み] GCC -fPIC オプション

2022-03-18 06:06:05

質問

について読んだことがあります。 GCCのコード生成規則に関するオプション しかし、quot;Generate position-independent code (PIC)" が何をするものなのか理解することができませんでした。例を挙げて説明してください。

どのように解決するのですか?

位置非依存コードとは、生成された機械コードが動作するために特定のアドレスに配置されることに依存しないことを意味します。

例えば、ジャンプは絶対的ではなく、相対的に生成されることになる。

疑似アセンブリです。

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

EDIT: コメントに応えて

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