도서관 [재 인쇄] Windows 및 Linux 시스템에 도입

라이브러리 Windows 및 Linux 시스템에 도입

 

정의 라이브러리

라이브러리는 미리 컴파일 된 기능의 집합이고, 이러한 기능은 기록 재사용의 원리에 따른다. 그들은 일반적으로 서로 관련된 일반적인 일련의 작업을 완료하는 데 사용되는 특정 기능으로 구성되어, 기본적으로 라이브러리가 메모리에 운영 체제에서 실행할 수있는 바이너리 실행 코드 형성한다.

Windows 플랫폼 또는 Linux 플랫폼에 상관없이, 도서관의 수가 많은,하지만 때문에 윈도우와 리눅스, 이렇게 두 가지의 바이너리 라이브러리의 서로 다른 성격 호환되지 않습니다.

클래스 라이브러리

Windows에서 라이브러리, 두 가지가있다 : 정적 라이브러리 (.LIB) 및 동적 링크 라이브러리 (.DLL).

리눅스에서 라이브러리는 두 가지가있다 : 정적 라이브러리 (.A) 및 공유 라이브러리 (.so를).

xxxx는 lib 디렉토리의 이름입니다 리눅스 libxxxx.a 일반적으로 정적 라이브러리를 이름

리눅스에서 동적 라이브러리의 이름은 일반적으로 libxxxx.so.major.minor, xxxx는 LIB 년대의 이름, 전공 주 버전 번호입니다, 미성년자 부 버전 번호입니다.

유사점과 라이브러리 및 Windows에서 리눅스에서 라이브러리의 차이

윈도우 동적 연결 라이브러리 (.dll) 리눅스 공유 라이브러리 (.so를),이 프로그램의 많은 일반적인 기능이 포함되어 있습니다. 중복 절차, 일반적으로 사용되는 각 기능의 사본을 포함하는 단지에 필요할 때 공유 라이브러리 함수를 호출하지 않는 절차를 프로그램 개발을 촉진하고 줄이기 위해. 이러한 방법으로 우리는 동적 링크 (동적 링크)로 전화하십시오. 그리고 때때로 우리는 함수 호출 공유 라이브러리를 호출하는 프로그램을 원하지 않지만, 라이브러리 함수 코드는 프로그램 코드에 직접 연결되어있다, 즉, 프로그램 자체는 공유 라이브러리 함수의 복사본을 가지고있다. 이러한 방법으로 우리는 정적 링크 (정적으로 링크)로 전화하십시오.

따라서, 단순히 정적 및 공유 라이브러리 (DLL)의 차이가 다른 코드는 순간에로드되는 것을 말한다.

코드 정적 라이브러리는 실행 파일 컴파일하는 동안 프로그램, 따라서 더 큰로드되었습니다.

실행 프로그램, 컴파일 과정에서 단순한 참조, 따라서 작은 코드 크기를 실행하는 경우에만 공유 라이브러리 코드는 메모리에로드됩니다.

리눅스에서 윈도우 (.DLL) (.so를) 공유 라이브러리에서 동적 링크 라이브러리의 차이

파일 및 .exe 파일 .DLL 사실, PE 실행 파일 형식을 속한다. 외부 기호에 대한 암시 적 참조를 들어, 위치를 쓸 필요가 어디 PE 헤드의 외부 기호. 머리에서 PE PE 로더는 심볼 테이블의 의존도를 찾아 다른 .dll 파일에 의존로드합니다.

그리고 리눅스의 경우가 아니다! .so를 주로 ELF 실행 파일 형식을 파일. 그들은 외부 기호를 필요로 할 때, 당신은 이러한 기호의 위치가 위치를 지정하지 않을 수 있습니다. 자체가 그것을 알고하지 않는 보통 .so를 파일은 .so를 내부의 어떤 그 문자에 따라 달라집니다. 한다면 dlopen 때이 기호는 호출 프로세스에 의해 실행을 제공합니다.

우리는 Windows에서 .dll 파일은 또한 .LIB 파일을 수행해야합니다했다, 그리고 리눅스 만 해당 헤더 파일을 충분히되어있을 수 있습니다. 새로운 .so를의 준비를 위해, 당신이 함께 공동 모든 기호의 요구에 최종 실행 파일까지의 기호를 찾을 수 없습니다. 이 다른 창은 .DLL에 암시 적 의존 .DLL있을 수 있지만 일반적으로 리눅스 .so를하자 할 필요가 없습니다 암시 적 종속성이 .SO.

이 문서 업데이트에 대한 영구 링크 : http://embeddedlinux.org.cn/emb-linux/entry-level/200903/12-553.html

추천

출처www.cnblogs.com/jinanxiaolaohu/p/11361099.html