바이너리와 라이브러리의 차이점은 무엇입니까?

바이너리와 라이브러리의 차이점은 무엇입니까?

파일 시스템 계층 구조 표준을 이해하려고 합니다. 나는 바이너리와 라이브러리를 찾아보고 현재 이해하고 있습니다.

바이너리 파일CPU와 프로세서를 비트로 직접 제어하는 ​​바이너리 형식의 컴퓨터가 읽을 수 있는 코드 파일이다.

도서관PHP용 Javascript에서 모듈이 필요할 때처럼 다양한 프로그램에서 편리하게 사용할 수 있는 기능입니다.

이 이해가 맞나요? 그렇다면 왜 여전히 라이브러리와 바이너리를 분리합니까? 일부 도서관바이너리 파일이죠? 일부 바이너리(cat, less, date, rm, cp 등)는 마치 라이브러리인 것처럼 사용 및 재사용됩니다... 누군가 차이점을 설명하고 이 두 단어 정의의 더 나은 버전을 찾도록 도와줄 수 있습니까? 감사해요.

답변1

귀하의 이해는 대부분 정확하지만 고려해야 할 몇 가지 추가 사항이 있습니다.

  1. "바이너리"는 사람이 읽을 수 없는 것을 의미합니다. 이는 일반적으로 기계 코드를 참조하지만 다른 많은 파일도 이러한 의미에서 바이너리이며 대부분의 멀티미디어 형식이 좋은 예입니다. 그러나 FHS는 이 용어를 보다 구체적으로 사용합니다.
  2. 라이브러리는 이진 코드일 수 있습니다. 실제로 대부분은 /lib기계어 코드로 컴파일되는 라이브러리입니다.
  3. 라이브러리에서 코드를 호출하는 등 유사한 기능이 cat쉘 스크립트에서 사용되지만 자체적으로 실행될 수 있으므로 FHS 의미의 라이브러리는 아닙니다.

이러한 견해로 인해 표준 문서를 작성하지 않는 사람들 사이에서 더 일반적인 용어는 다음과 같습니다.

  • 개체 파일: 기본적으로 컴파일된 기계어 코드이지만 실행 또는 호출이 불가능할 수도 있습니다. 일반적 .o으로 다른 범주 중 하나에 속하지 않는 한 확장 기능을 가지며 소프트웨어를 구축할 때를 제외하고는 대부분의 시스템에서 거의 볼 수 없습니다. 아래 내용을 이해하는 데 중요하기 때문에 여기에 나열합니다.

  • 실행 파일: 이 파일은 주로 직접 실행할 수 있는 자체 포함 코드로 구성됩니다. 커널에서 직접 로드할 수 있는 특수 형식의 개체 파일(예 cat: , bash, , 및 python모두 실행 파일임)일 수도 있고 자체 실행 파일인 일부 중간 프로그램(Minecraft, pydoc, 및 cowsay모두 실행 파일임)에 의해 해석될 수도 있습니다. 예) 실행 파일 형식입니다. 첫 번째 유형의 실행 파일에는 UNIX 시스템에서 파일 확장자가 거의 없지만 두 번째 유형의 실행 파일에는 확장자가 있을 수도 있고 없을 수도 있습니다. 이것이 FHS가 "바이너리 파일"이라고 부르는 것입니다. 다른 실행 파일에서 실행할 수 있지만 이를 호출하려면(C fork()exec()C++, Python의 모듈 외부 subprocess등) 별도의 프로세스로 실행하기 위해 특수 함수를 호출해야 합니다 .

  • 라이브러리: 이 파일에는 다른 라이브러리나 실행 파일에서 호출할 수 있는 재사용 가능한 코드가 포함되어 있습니다. 라이브러리가 로드되면(컴파일된 코드에 대해 말할 때 "링크됨"이라고 함) 라이브러리의 코드는 (대부분) 다른 코드에 의해 직접 호출되며 이를 호출한 코드와 동일한 프로세스에서 실행됩니다. 라이브러리는 세 가지 일반적인 유형으로 구분됩니다.

    1. 정적 라이브러리: 원본 버전입니다. 이는 라이브러리의 각 기능에 대해 하나씩 여러 개체 파일을 포함하는 아카이브 파일(일반적으로 AR 형식)로 구성됩니다. 개체 파일은 이를 사용하는 실행 파일에 연결되므로 정적 라이브러리만 사용하는 실행 파일은 기본적으로 다른 코드와 100% 독립적입니다. UNIX 시스템에서는 일반적으로 .a확장자가 있습니다. 정적 라이브러리의 개념은 컴파일된 프로그래밍 언어 외부에는 실제로 존재하지 않습니다.
    2. 동적 라이브러리: 오늘날 가장 일반적으로 사용되는 라이브러리 유형입니다. 동적 라이브러리는 일반적으로 .soUNIX(Windows의 표준)에서 확장자를 갖는 특수 개체 파일로 .dll, 이를 사용하는 실행 파일에 의해 런타임에 로드됩니다. 프로덕션 시스템에서 찾을 수 있는 대부분의 항목은 /lib동적 라이브러리입니다.
    3. 모듈: 이는 해석된 언어의 동적 라이브러리와 동일합니다. 처리는 파일이 모듈이자 실행 파일일 수 있는 컴파일된 언어와 약간 다릅니다( http.serverPython 표준 라이브러리의 예제 참조).

관련 정보