2017-12-27 32 views
0

관련 게시물 herehere이 있습니다.정적 및 동적 연결을 위해 별도의 라이브러리가 필요한 이유는 무엇입니까?

제 생각에 따르면 정적 링크는 라이브러리에서 실행 파일로 직접 코드 (어떤 코드? 컴퓨터 코드?)를 직접 삽입합니다. 그러나 동적 연결은 참조 (pointer?) 지점을 라이브러리의 어딘가에 만 삽입합니다.

그런 다음 동일한 기능의 라이브러리가 두 가지 별도 버전으로 필요한 이유가 궁금합니다. 예를 들어, 인텔 MKL의 경우 libmkl_sequential.a 및 libmkl_sequential.so가 있습니다. 정적 링크는 정적 라이브러리를 링크해야하며, 동적 링크는 동적 라이브러리를 링크해야합니다. 동적 연결이 단순히 정적 라이브러리를 가리킬 수없는 이유는 무엇입니까?

동일한 기능의 .so와 .a의 내용의 실제 차이점은 무엇입니까?

+0

[정적 라이브러리와 동적 라이브러리의 차이점 (링커/로더에서 사용하는 방법을 무시 함]) (https://stackoverflow.com/questions/47116485/differences-between-static-libraries-and-dynamic- 도서관 - 무시 - 어떻게 - 그들 -) –

답변

0

실행할 코드를 메모리에로드해야합니다. 정적으로 연결된 함수는 프로그램의 일부가되므로 프로그램이 시작될 때 함께로드됩니다.

동적 연결이 단순히 정적 라이브러리를 가리킬 수없는 이유는 무엇입니까? 정적 라이브러리는 디스크 파일입니다. 어떻게 내부를 가리키고 싶습니까? 시작 가능한 실행 프로그램을 조사하고, 사용할 함수를 묻고, 해당 라이브러리를 메모리에로드하는 메커니즘 (로더 & 바인더)이 있어야합니다. 예, "libmkl_sequential.a"및 "libmkl_sequential.so"버전의 netto 코드 (명령어)는 동일 할 수 있지만 라이브러리의 정적 및 동적 유형에는 라이브러리 형식 작성자가 지정한 다른 보조 메타 정보가 필요합니다.