Là nhị phân linux phổ biến cho tất cả các loại phân phối?


15

Tôi tình cờ cài đặt mô phỏng mô phỏng VHDL trên Linux. Hướng dẫn nói rằng nó chỉ hỗ trợ RedHat hoặc Suse, nhưng tôi chỉ cố gắng cài đặt nó trên Ubuntu. Và, tôi có thể cài đặt nó mà không có vấn đề gì.

nhập mô tả hình ảnh ở đây

  • Là nhị phân linux phổ quát cho tất cả các loại phân phối? Ý tôi là, nếu tôi thực hiện một chương trình phân phối A, tôi có thể chắc chắn nó sẽ chạy trên bất kỳ linux nào không?
  • Tại sao hầu hết các nhà cung cấp chương trình thương mại nói rằng chương trình đang chạy trên phân phối cụ thể? (chủ yếu là Redhat và Suse, không phải Ubuntu)

Câu trả lời:


15

Đây là hai câu hỏi:

Là một nhị phân Linux phổ quát cho tất cả các bản phân phối?

Nó phụ thuộc:

  • Nếu chương trình không sử dụng gì ngoài nhân Linux, nó sẽ phổ biến ngoại trừ câu hỏi 32 hoặc 64 bit. Một "hello world" của Linux (một chương trình tối giản chỉ in "hello world" sang cửa sổ terminal) có thể độc lập với bản phân phối.
  • Nếu chương trình đang sử dụng bất kỳ thư viện hoặc dịch vụ không phải kernel nào (hầu hết là Linux, thì kernel khá nhỏ), có những khác biệt trong các thư viện được bao gồm, các thư viện này nằm ở đâu và chúng nằm ở đâu. Vì vậy, trong trường hợp này (phổ biến nhất) phân phối trường hợp không bằng nhau.

Tại sao nhiều chương trình thương mại nói rằng chúng chỉ hoạt động trên một hoặc một vài bản phân phối?

Bởi vì có một số lượng lớn các bản phân phối Linux và không ai muốn thử nghiệm chương trình của họ trên tất cả chúng.

Một nhà cung cấp thương mại thường sẽ nói rằng họ chỉ hỗ trợ các bản phân phối mà họ đã kiểm tra phần mềm của họ. Nó có thể hoặc không thể hoạt động trên các bản phân phối khác, từ quan điểm của nhà cung cấp, vấn đề chỉ là bạn không thể khiếu nại nếu nó không hoạt động trên bản phân phối mà họ không hỗ trợ.

Những phân phối nào được chọn để thử nghiệm phụ thuộc vào những gì nhà cung cấp mong đợi khách hàng của họ sẽ sử dụng. Các chương trình thương mại / chuyên nghiệp thường chọn phân phối doanh nghiệp, có thể thông qua lý do tương tự như "những người trả tiền cho hệ điều hành của họ có nhiều khả năng trả tiền cho phần mềm của chúng tôi", có thể chỉ đơn giản bằng cách đếm các phân phối được sử dụng bởi các khách hàng hiện tại của họ.

Xem thêm Mark Shuttleworth (người đầu tiên là lý do chúng tôi có Ubuntu) về khả năng tương thích nhị phân giữa Ubuntu và Debian - Debian là họ hàng phân phối gần nhất của Ubuntu.


2

Cả RedHat và SUSE đều có truyền thống Linux doanh nghiệp lâu đời và quản lý để có được các gói đó được sản xuất và thử nghiệm cho chúng. Thời gian trôi qua, sẽ có nhiều ví dụ về các gói đã được thử nghiệm để hoạt động trên Ubuntu. Trên thực tế, nhiều gói như vậy kể từ năm ngoái đã được thử nghiệm để hoạt động với Ubuntu. Khi Canonical thỏa thuận với nhiều nhà cung cấp hơn, sẽ có nhiều gói được chứng nhận Ubuntu hơn.

Đối với câu hỏi đầu tiên của bạn: Nếu bạn muốn tạo một chương trình chạy trên tất cả các bản phân phối, hãy tạo một tệp thực thi tĩnh (so với động). Một statically-linkedtệp thực thi không phụ thuộc vào các thư viện hệ thống, do đó có thể hoạt động giữa các bản phân phối, miễn là kiến ​​trúc (như Intel / AMD) là như nhau.

Đây là một chương trình,

int main(void)
{ 
  printf("Hello, World!\n");
  return 0;
}

Hãy biên dịch như bình thường,

$ gcc helloworld.c -o helloworld
$ ./helloworld
Hello, World!
$ ldd helloworld
    libc.so.6 => /lib/libc.so.6 (0x00007f3cc3481000)
...
$ 
$ gcc helloworld.c -static -o helloworld_static
$ ./helloworld
Hello, World!
$ ldd helloworld_static
    not a dynamic executable
$ 

Vậy, bạn có thể làm gì với chương trình VHDL đó? Lấy tệp .rpm và chuyển đổi nó thành .deb bằng cách sử dụng người ngoài hành tinh . Sau đó, cài đặt. Nếu nó hoạt động, bạn ổn. Nếu nó không hoạt động, sử dụng lddđể tìm ra tập tin thư viện bị thiếu. Trong trường hợp xấu nhất, hãy tạo một máy ảo cho các bản phân phối Linux khác và chạy chương trình ở đó.


1

Tôi thứ hai trả lời của jg-faustus, nhưng, bạn cũng cần cẩn thận về định dạng gói. Ngay cả khi bản thân các tệp thực thi là di động và có tất cả các thư viện cần thiết, các bản phân phối khác nhau đặt các tệp ở những nơi khác nhau và sử dụng các công cụ khác nhau để quản lý các gói đã cài đặt. Nếu nhà cung cấp đóng gói sản phẩm của họ dưới dạng gói RPM, bạn sẽ phải sử dụng gói như ' người ngoài hành tinh 'để chuyển đổi và cài đặt nó dưới bản phân phối dựa trên DEB như Ubuntu.

Nếu họ phân phối phần mềm của họ dưới dạng mã nguồn, thì bạn cũng có thể tự biên dịch phần mềm, tại thời điểm đó, tệp thực thi sẽ được điều chỉnh cho hệ thống cụ thể của bạn (nhưng người quản lý gói ubfox sẽ không biết về 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.