동적 라이브러리는 언제 필요합니까?

동적 라이브러리는 언제 필요합니까?

동적 라이브러리는 RAM을 절약하고 프로그램이 실행될 때만 필요하기 때문에 좋다고 들었습니다.

이제 질문이 있습니다. 프로그램이 실행될 수 있다면 필요한 모든 동적 라이브러리가 이미 거기에 있다고 말할 수 있습니까(동적 라이브러리 누락 오류 없이)?

프로그램이 각각 동적 라이브러리를 필요로 하는 .o세 개의 파일에서 링크 되어 있다고 가정합니다. .o동적 라이브러리를 삭제해도 프로그램이 계속 실행되나요?

내가 아는 한 동적 라이브러리를 로드하는 방법에는 두 가지가 있습니다.

  1. 동적 라이브러리는 객체 파일을 링크할 때 로드됩니다. 예를 들어 g++ a.cpp -ltest여기에서는 동적 라이브러리를 libtest.so프로그램에 링크합니다. 삭제하면 libtest.so프로그램을 실행할 수 없습니다.
  2. 시스템 API 기능을 사용하여 동적 라이브러리 로드: dlopen.이 경우 제가 이해하는 한, 프로그램 실행이 코드를 건드리지 않으면 dlopen오류가 발생하지 않습니다.

내 말이 맞다면 프로그램이 오류 없이 실행된다면 필요한 모든 동적 라이브러리가 거기에 있어야 한다는 의미라고 말할 수 있습니까?

답변1

이는 기본적으로 프로그램이 시작될 때 동적 라이브러리가 로드되는지(ld.so의 일반적인 동작) 또는 라이브러리가 필요한 코드가 처음 실행될 때 느리게 로드되는지에 따라 달라집니다. 첫 번째 경우에는 프로그램이 매우 일찍 오류와 함께 종료됩니다. 두 번째 경우에는 동적 라이브러리가 필요한 코드가 전혀 실행되지 않고 성공적으로 실행될 수 있습니다. 두 번째 경우의 예로는 파일 유형에 따라 오디오 코덱을 로드하는 오디오 파일 핸들러가 있습니다. mp3 코덱이 설치되어 있지 않은 경우에도 다른 파일 형식에서는 작동할 수 있습니다. (muru의 의견은 더 깊이 논의되는 문제를 가리킵니다)

관련 정보