저의 짧은 지식으로는 특수한 상황이 아닌 경우 컴파일러를 통해 만들어지는 object file은 relocatable하다고 알고 있습니다.
기존의 a.out, coff, ELF 모두 말이죠.
저는 여기서 relocatable의 뜻을 메모리 어디나 재배치 할 수 있다, 즉 프로그램이 커널에 의해 로드되는 과정에서 메모리의 어느 곳으로도 로드될 수 있다라고 생각하고 있었습니다.
그런데 공유 라이브러리를 만들기 위한 gcc 옵션 -fPIC나 -fpic는 position-independent, 즉위치 독립적인 코드를 만든다고 하네요. 그리고 그 설명을 보면 역시 메모리의 어느 곳에서나 로드될 수 있는 코드라고 합니다.