>  기사  >  운영 및 유지보수  >  Linux에서 동적 라이브러리와 정적 라이브러리의 차이점은 무엇입니까

Linux에서 동적 라이브러리와 정적 라이브러리의 차이점은 무엇입니까

青灯夜游
青灯夜游원래의
2021-11-23 11:08:506240검색

차이: 1. 정적 라이브러리는 프로그램이 컴파일될 때 대상 코드에 연결되며, 프로그램이 실행될 때 정적 라이브러리는 더 이상 필요하지 않습니다. 프로그램은 컴파일되지만 프로그램이 실행될 때 로드되므로 프로그램이 실행될 때 동적 라이브러리가 존재해야 합니다. 2. 동적 라이브러리에서 생성된 파일은 상대적으로 작은 반면 정적 라이브러리에서 생성된 파일은 상대적으로 큽니다.

Linux에서 동적 라이브러리와 정적 라이브러리의 차이점은 무엇입니까

이 튜토리얼의 운영 환경: CentOS 6 시스템, Dell G3 컴퓨터.

Linux에서 동적 라이브러리와 정적 라이브러리의 유사점과 차이점

동일점:

정적 라이브러리와 동적 라이브러리는 모두 .o 파일로 생성됩니다. 따라서 먼저 gcc를 통해 소스 프로그램을 .o 파일로 컴파일해야 합니다.

차이:

1 코드 로딩 시간이 다릅니다

  • 정적 라이브러리가 대상 코드에 연결됩니다. 프로그램이 컴파일되면 프로그램이 실행될 때 정적 라이브러리가 더 이상 필요하지 않습니다.
  • 동적 라이브러리는 프로그램이 컴파일될 때 대상 코드에 연결되지 않지만 프로그램이 실행될 때만 로드됩니다. 실행 중이므로 프로그램이 실행 중일 때 동적 라이브러리도 존재해야 합니다

2. 컴파일 규칙이 다릅니다

  • 동적 라이브러리 컴파일

동적 클래스 라이브러리의 이름은 일반적으로 libxxx.so이며, 동적 함수 라이브러리는 컴파일 중에 대상 코드로 컴파일되지 않습니다. 프로그램은 관련 함수에 도달할 때만 함수 라이브러리의 해당 함수를 호출하므로 동적 함수 라이브러리에서 생성된 실행 파일은 상대적으로 작습니다.

동적 라이브러리 컴파일: 가장 중요한 것은 GCC 명령줄 ​​옵션입니다. -shared 이 옵션은 동적 링크 라이브러리를 생성하도록 지정합니다. 예:

g++ -shared -o libd1.so d1.o /*동적 라이브러리 파일 생성 중간 대상 파일을 기반으로 d1.so*/

g++ - shared -o libd2.so d2.o /*중간 대상 파일을 기반으로 동적 라이브러리 파일 d2.so 생성 d2.o*/

  • 정적 라이브러리 컴파일

클래스 라이브러리의 이름은 일반적으로 libxxx.a입니다. 정적 함수 라이브러리를 사용합니다. 컴파일된 파일은 상대적으로 큽니다. 전체 함수 라이브러리의 모든 데이터가 대상 코드에 통합되기 때문입니다. 즉, 컴파일된 실행 프로그램은 사용된 모든 함수가 컴파일되었기 때문에 외부 함수 라이브러리 지원이 필요하지 않습니다. 물론 이는 단점이기도 합니다. 왜냐하면 정적 함수 라이브러리가 변경되면 프로그램을 다시 컴파일해야 하기 때문입니다.

UNIX에서는 ar 명령을 사용하여 정적 라이브러리를 생성하거나 운영합니다.

ar Archivefile objfile

archivefile: archivefile은 정적 라이브러리의 이름입니다.

objfile: objfile은 확장자가 .o인 중간 대상 파일 이름입니다. 여러 개의 병렬이 있을 수 있습니다.

예:

g++ -o hello.o -c hello.cpp
ar cqs libHello.a hello.o

관련 권장 사항: "Linux 비디오 튜토리얼"

위 내용은 Linux에서 동적 라이브러리와 정적 라이브러리의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.