Gói nhị phân là gì? Làm thế nào để xây dựng chúng?


12

Tôi muốn nhận chi tiết về gói nhị phân và chạy chúng trên linux. Tôi đang chạy hệ điều hành Debian (Ubuntu / Linux mint) Linux os.

  1. Làm thế nào để xây dựng gói nhị phân từ nguồn? Và tôi có thể tải trực tiếp gói nhị phân cho các ứng dụng (như firefox, v.v.) và các trò chơi (như boswars, v.v.) không?
  2. Tôi chạy một số gói trực tiếp ở định dạng "xyz.linux.run" Gói này là gì? Họ có độc lập với sự phụ thuộc? hoặc nó được xây dựng trước các gói nhị phân?
  3. Cách xây dựng chúng có thể chạy trên hệ điều hành linux bằng cách trực tiếp "xyz.linux.run" trên linux.
  4. Sự khác biệt giữa gói nhị phân và gói deb là gì?

Bạn đã tìm thấy cách xây dựng gói nhị phân từ nguồn?!
Dr.jacky

Câu trả lời:


17

Theo một nghĩa nghiêm ngặt, một tệp nhị phân là một tệp không được mã hóa thành văn bản có thể đọc được. Thông thường hơn, một "nhị phân" đề cập đến một tệp được biên dịch, mã thực thi, mặc dù bản thân tệp đó có thể không được thực thi (tham khảo không nhiều đến các quyền đối với khả năng được chạy một mình; một số tệp mã nhị phân như thư viện được biên dịch, nhưng bất kể quyền nào, chúng không thể được thực thi tất cả). Một tệp nhị phân chạy dưới dạng thực thi độc lập là một "tệp thực thi", mặc dù không phải tất cả các tệp thực thi đều là nhị phân (và đây là về quyền: các tệp văn bản có thể thực thi được gọi trình thông dịch qua shebang, chẳng hạn như #!/bin/shlà tệp thực thi).

Gói nhị phân là gì?

Gói nhị phân trong ngữ cảnh linux là gói ứng dụng chứa các tệp thực thi (được xây dựng trước), trái ngược với mã nguồn.

Lưu ý rằng điều này không có nghĩa là một tệp gói tự nó là một tệp thực thi. Tệp gói là một tệp lưu trữ (giống như a .zip) chứa các tệp khác và tệp gói "nhị phân" là tệp chứa tệp thực thi (mặc dù một lần nữa, tệp thực thi không nhất thiết phải là nhị phân và thực tế có thể sử dụng gói nhị phân cho thư viện được biên dịch là mã nhị phân, nhưng không thể thực thi). Tuy nhiên, gói phải được giải nén để bạn truy cập các tệp này.

Thông thường, hệ thống quản lý gói được chăm sóc cho bạn (ví dụ apt / dpkg) sẽ tải xuống gói và giải nén và cài đặt các nhị phân bên trong cho bạn.

Sự khác biệt giữa gói nhị phân và gói deb là gì?

Không có - .debcác gói là các gói nhị phân, mặc dù có các gói .debchứa nguồn thay thế, chúng thường được -srcgắn vào tên của chúng.

Tôi chạy một số gói trực tiếp ở định dạng "xyz.linux.run" Gói này là gì?

Chúng thường là các gói nhị phân tự giải nén; họ làm việc bằng cách nhúng một tải trọng nhị phân vào một tập lệnh shell. "Tự giải nén" có nghĩa là bạn không phải gọi một ứng dụng khác (chẳng hạn như trình quản lý gói) để giải nén và sử dụng chúng. Tuy nhiên, vì chúng không làm việc với trình quản lý gói, việc giải quyết các phụ thuộc của chúng có thể là một crapshoot và do đó một số gói như vậy sử dụng các tệp thực thi được liên kết tĩnh (chúng có tất cả các thư viện cần thiết được tích hợp vào chúng) gây lãng phí một chút bộ nhớ khi chúng được sử dụng .


Câu trả lời tuyệt vời!, Tôi có nên tách khỏi Câu hỏi này: Làm thế nào để xây dựng tệp thực thi được xây dựng sẵn (gói nhị phân) từ nguồn?
Pandya

Vâng, đó sẽ là một câu hỏi hay, nếu nó chưa được trả lời ở đây dưới một hình thức nào đó.
goldilocks

6

Vì phần còn lại của câu hỏi của bạn đã được trả lời bởi goldilocks, tôi sẽ cân nhắc về phần đầu tiên, cách xây dựng mọi thứ từ nguồn.

Phiên bản thực sự ngắn là khi bạn tải xuống các tệp nguồn từ internet, chúng thường sẽ có một readme được liên kết với chúng, nó sẽ cho bạn biết chính xác làm thế nào để khởi động chương trình.

Nhưng bảo bạn đọc readme không thực sự trả lời câu hỏi, vì vậy theo nghĩa cơ bản, bạn có thể viết một chương trình rất cơ bản đó là

    #include <stdio.h>

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

và nhập gcc helloWorld.cgccsẽ xây dựng nhị phân đó và xuất ra một chương trình viết "Hello World!" đến bàn điều khiển khi chạy.

Ok, vậy bây giờ bạn đã xây dựng một chương trình, tuy nhiên, nó sẽ không phải gõ vào mỗi tệp nguồn duy nhất mà bạn muốn biên dịch mỗi khi bạn cần biên dịch một cái gì đó? Đó là những gì makefilesdành cho. Nếu bạn chạy trên một chương trình mà có một loạt các file nguồn nó thường sẽ đi kèm với một makefile hoặc một số tập tin tự động xây dựng khác ( ant, Cmakehay autoconfhoặc một cái gì đó).

Để xây dựng các loại chương trình này, chỉ cần chạy make <build target>bên trong thư mục. Một makefile cho chương trình hello world của tôi có thể bao gồm một mục tiêu được gọi là helloworldchỉ biên dịch helloWorld.c. Tôi sẽ chạy nó bằng make helloworldvà nó sẽ tạo ra một nhị phân.

Lưu ý rằng việc xây dựng mọi thứ từ nguồn có thể mất nhiều thời gian và bộ nhớ lớn ( nhóm Chromium thậm chí còn đề xuất ổ cứng thứ hai để tạo nguồn của chúng! ). Cũng lưu ý rằng khi bạn đang xây dựng mọi thứ từ nguồn, bạn sẽ phải xử lý các phụ thuộc, thay vì người quản lý gói làm việc đó cho bạn

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.