
둘 다 "링커"라고 불리며 바이너리를 연결하는 데 사용되지만 실제로 서로 어떻게 다른지 알 수 없습니다. 누구든지 차이점을 말해 줄 수 있습니까?
답변1
너무 기술적이지 않으면서: 둘 다 "링커"입니다. 즉, 컴파일된 코드 조각을 컴파일된 코드의 다른 조각과 결합/로드하는 도구입니다.
ld
는 정적 링커이고 는 ld.so
동적 링커입니다.
내 생각에 이 문자 so
는 "공유 객체"의 약자이며 일반적으로 공유 라이브러리, 즉 프로그램에 동적으로 링크될 수 있는 라이브러리의 파일 이름 접미사로 표시됩니다(하나의 라이브러리는 여러 프로그램에서 "공유"됩니다). . 이와 대조적으로 정적 라이브러리에는 .a
"아카이브"(유틸리티에 의해 생성됨)를 의미하는 파일 이름 접미사가 있는 경우가 많습니다 ar
.
정적 링커는 일반적으로 컴파일 프로세스의 마지막 단계로 컴파일 타임에 프로그램이나 라이브러리를 연결하여 바이너리 실행 파일이나 라이브러리를 만듭니다. 바이너리 실행 파일의 경우 다음과 같은 정적 바이너리일 수 있습니다.모두라이브러리는 바이너리 자체에 로드되거나 일부 라이브러리만 정적으로 링크된 동적으로 링크된 바이너리일 수 있습니다.
동적 링커는 컴파일 타임에 동적으로 링크된 라이브러리를 런타임 시 프로세스의 주소 공간에 로드합니다.
해당 시스템 의 설명서를 참조하세요 ld
.ld.so