메시지 No such file or directory
가 실행 파일을 참조하지 않습니다 : a.out
. 대신 32 비트 동적으로 연결된 실행 파일 을 실행하는 데 필요한 도우미 프로그램 을 나타냅니다 .a.out
이제이 좋은 기사에서이 모든 것들을 잘 설명했습니다.
정적 및 동적 연결
이진 실행 파일에는 정적 연결과 동적 연결의 두 가지 유형이 있습니다. 정적으로 링크 된 것들 에 대해 먼저 : 프로그램이 라이브러리 함수를 호출하려고 할 때 이름으로 참조합니다. 소스에서 프로그램을 빌드 할 때 프로그램에 사용 된 모든 라이브러리 기능이 라이브러리에서 프로그램으로 복사됩니다. 그런 다음 프로그램은 자체 코드와 사용하는 라이브러리 함수의 코드를 포함합니다. 그런 다음 호출 장소에서 이름이 프로그램의 해당 기능 주소로 변경됩니다. 이 프로세스는 함수 이름과 함수 자체의 구현을 연결 하기 때문에 연결 이라고합니다. 프로그램을 빌드 한 후에는 링크를 변경할 수 없으므로 static 이라고 합니다.
동적으로 링크 된 프로그램은 다르게 작동합니다.이 프로그램은 또한 이름별로 라이브러리 기능을 참조합니다. 프로그램을 빌드 할 때 두 개의 목록이 프로그램과 함께 어셈블되고 저장됩니다. 어느 위치에서 어떤 라이브러리 기능이 사용되는지와 프로그램에서 사용하는 기능이 들어있는 라이브러리가 있습니다. 프로그램을 구축하기위한 전부입니다.
나중에 실행시 특수 도우미 프로그램 인 소위 동적 링커는 라이브러리 목록의 각 라이브러리에 대해 파일 시스템의 특정 위치를 찾아 메모리에로드합니다. 이제 동적 링커는 라이브러리 함수가 사용할 수있는 메모리 주소를 알고 있습니다. 첫 번째 목록을 사용하여 라이브러리 함수를 호출하는 모든 위치에 올바른 주소를 씁니다. 그런 다음 동적으로 연결된 프로그램을 실행할 수 있습니다.