이진 패키지 란 무엇입니까? 그들을 구축하는 방법?


12

바이너리 패키지에 대한 세부 정보를 얻고 Linux에서 실행하고 싶습니다. Debian base (Ubuntu / Linux mint) Linux OS를 실행 중입니다.

  1. 소스에서 바이너리 패키지를 빌드하는 방법은 무엇입니까? 그리고 응용 프로그램 (firefox 등)과 게임 (boswars 등) 용 바이너리 패키지를 직접 다운로드 할 수 있습니까?
  2. "xyz.linux.run"형식의 직접 패키지를 실행합니다.이 패키지는 무엇입니까? 그것들은 의존성과 무관합니까? 또는 사전 빌드 된 바이너리 패키지입니까?
  3. 리눅스에서 직접 "xyz.linux.run"을 실행하여 리눅스 운영 체제에서 실행할 수있는 빌드 방법
  4. 바이너리 패키지와 deb 패키지의 차이점은 무엇입니까?

소스에서 바이너리 패키지를 빌드하는 방법을 찾았습니까?
Dr.jacky

답변:


17

엄밀한 의미에서 이진 파일은 사람이 읽을 수있는 텍스트로 문자 인코딩되지 않은 파일입니다. 더 구어 적으로 "바이너리"는 파일 자체가 실행 가능하지 않을 수 있지만 컴파일 될 수있는 실행 가능한 코드 인 파일을 의미합니다 (독립 실행 용량에 대한 권한은 그다지 중요하지 않습니다. 라이브러리와 같은 일부 바이너리 코드 파일은 컴파일되었지만 권한에 관계없이 단독으로 실행할 수는 없습니다. 모든 실행 파일이 이진은 아니지만 독립 실행 형 실행 파일로 실행되는 이진은 "실행 가능"입니다 (이는 권한에 관한 것입니다. 실행 파일과 같이 shebang을 통해 인터프리터를 호출하는 실행 가능 텍스트 파일 #!/bin/sh).

바이너리 패키지 란 무엇입니까?

Linux 컨텍스트의 이진 패키지는 소스 코드가 아닌 (사전 빌드 된) 실행 파일을 포함하는 응용 프로그램 패키지입니다.

패키지 파일 자체가 실행 파일이라는 의미는 아닙니다. 패키지 파일은 .zip다른 파일을 포함 하는 아카이브 (와 같은 일종의 파일)이고 "이진"패키지 파일은 실행 파일을 포함하는 파일입니다 (다시 실행 파일이 반드시 이진 파일 일 필요는 없지만 실제로는 이진 패키지가 사용될 수 있습니다) 바이너리 코드이지만 실행 파일이 아닌 컴파일 된 라이브러리). 그러나 이러한 파일에 액세스하려면 패키지의 포장을 풀어야합니다.

일반적으로 패키지 관리 시스템 (예 : apt / dpkg)으로 패키지를 다운로드하고 바이너리를 압축 해제하여 내부에 설치합니다.

바이너리 패키지와 deb 패키지의 차이점은 무엇입니까?

없다 - .deb패키지 바이너리 패키지입니다,가 있지만 .deb일반적으로 이들은 한 대신 소스를 포함의 -src자신의 이름에 추가가.

"xyz.linux.run"형식의 직접 패키지를 실행합니다.이 패키지는 무엇입니까?

이들은 일반적으로 자동 압축 풀림 바이너리 패키지입니다. 바이너리 페이로드를 쉘 스크립트에 임베드하여 작동합니다. "자동 압축 풀기"는 패키지를 풀고 사용하기 위해 다른 응용 프로그램 (예 : 패키지 관리자)을 호출 할 필요가 없음을 의미합니다. 그러나 패키지 관리자와 함께 작동하지 않기 때문에 종속성을 해결하는 것이 더 까다로울 수 있으므로 이러한 패키지 중 일부는 정적으로 링크 된 실행 파일 (필요한 모든 라이브러리가 내장되어 있음)을 사용하므로 사용시 약간의 메모리가 낭비됩니다 .


우수 답변!,이 질문과 분리해야합니까 : 소스에서 사전 빌드 된 실행 파일 (이진 패키지)을 작성하는 방법은 무엇입니까?
Pandya

예, 이미 어떤 형태로 대답하지 않았다면 그것은 그 자체로 좋은 질문 일 것입니다.
goldilocks

6

귀하의 질문의 나머지 부분은 goldilocks에 의해 답변되었으므로 첫 번째 부분, 소스에서 물건을 만드는 방법을 살펴 보겠습니다.

정말 짧은 버전은 인터넷에서 소스 파일을 다운로드 할 때 일반적으로 해당 파일과 관련된 추가 정보가 있으며 프로그램을 실행하는 방법을 정확하게 알려줍니다.

그러나 readme를 읽도록 지시한다고해서 실제로 질문에 대답하는 것은 아니기 때문에 기본적인 의미에서 매우 기본적인 프로그램을 작성할 수 있습니다.

    #include <stdio.h>

    int main( ) {
        printf("Hello World!");
    }

에서 입력 gcc helloWorld.cgcc바이너리 출력을하는 프로그램이 쓰기 구축 할 것 "안녕하세요!"를 실행될 때 콘솔에.

자 이제 프로그램을 만들었지 만 컴파일 할 때마다 컴파일하려는 모든 단일 소스 파일을 입력해야합니까? 그게 다야 makefiles. 당신은 일반적으로 메이크 또는 다른 빌드 자동화 파일 (함께 올 것이다 소스 파일의 무리가있는 프로그램을 통해 실행하는 경우 ant, Cmake또는 autoconf또는 무언가를).

이러한 유형의 프로그램을 빌드하려면 make <build target>디렉토리 내부에서 실행 하십시오. 내 hello world 프로그램의 makefile에는 helloworldhelloWorld.c를 컴파일 하는 대상이 포함될 수 있습니다 . 나는 이것을 실행 make helloworld하고 바이너리를 출력 할 것이다.

소스에서 물건을 만드는 데 시간이 오래 걸리고 많은 양의 메모리가 필요할 수 있습니다 ( Chromium 팀은 소스를 만들기 위해 두 번째 하드 드라이브를 권장하기도합니다 ). 또한 소스에서 물건을 만들 때 패키지 관리자가 대신 의존성을 다루어야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.