Os processos obtêm um espaço de endereço virtual. O arquivo ELF especifica um endereço virtual para carregar o conteúdo da seção, incluindo objetos compartilhados nesse espaço de endereço virtual. Esses seriam endereços virtuais.
Seções têm tabelas de realocação que apontam para endereços dependentes de posição que são corrigidos durante a realocação no momento do carregamento. Há vários motivos para isso, mas se todos os endereços da seção puderem ser realocados para a seção, isso é relocável. produzindo um arquivo relocável ELF que pode ser usado como entrada para criar um objeto executável ou compartilhado.
Uma biblioteca compartilhada é uma camada a partir de objetos compartilhados ELF e é uma função do vinculador dinâmico de sistemas operacionais no momento do carregamento. Ele irá remapear os endereços realocados no espaço de memória virtual do processo. Portanto, a biblioteca compartilhada possui seções relocáveis e endereços virtuais. É enganoso chamá-los de endereços relocáveis porque, na verdade, é a seção de código e a tabela de realocação associada que tornam o endereço relocável.
GCC -fPIC
cria código independente de posição que elimina a necessidade de realocação. Funcionalmente, embora um arquivo relocável ELF possa ter código independente ou dependente de posição.