位置独立コード
共有ライブラリ内部でのプロシージャ呼び出しは一般に小さなプロシージャ・リンク・テーブルのスタブを通して行い、そこから実際の関数を呼び出す。これにより、共有ライブラリが以前にロードされていた別のライブラリ群からの関数呼び出しを引き継ぐことを可能にしている。
位置独立コードからデータを参照する場合はさらに間接的な方式となり、そのコードがアクセスする全グローバル変数のアドレスを格納したGOT (Global Offset Table) を使用する。コンパイル単位またはオブジェクトモジュールごとにGOTがあり、コードから見て固定の相対位置に置かれる(ただし、ライブラリをリンクするまで実際のオフセットは不明である)。リンカがモジュール群をリンクして共有ライブラリを作る場合、各モジュールのGOTをマージし、最終的なコードとのオフセット値を設定する。共有ライブラリをロードした後は、オフセット群を調整する必要はない。
位置独立関数がグローバルなデータにアクセスする際、その時点のプログラムカウンタの値からGOTの絶対アドレスを決定する。そのため、偽の関数呼び出しを行ってリターンアドレスをスタック上に得る技法(x86の場合)や、(特定の汎用レジスタに特別な意味を与える規約を設けるなど)特別なレジスタを使う場合(PowerPC、SPARC、MIPSなどのRISCプロセッサやESA/390など)がある。MC68000、MC6809、WDC 65C816、クヌースのMMIX、ARM、x86-64 といったプロセッサアーキテクチャでは、プログラムカウンタ相対でデータを参照できる。その場合は位置独立コードを小さくでき、レジスタもあまり使わずに済むので、より効率的となる。