2012-02-17 51 views
8

Chúng tôi đang xây dựng một chương trình dưới Linux hoạt động trong một phiên bản Ubuntu cụ thể tốt. Nhưng chúng tôi muốn có cùng một nhị phân chạy trên Ubuntu 10.04 và 11.10. Sẽ hoàn toàn ổn khi xây dựng ứng dụng trên nền tảng 10.04. Nhưng khi tôi làm điều này, tôi có phụ thuộc vào các phiên bản thư viện cụ thể (ví dụ: libboost_thread.so.1.40.0) không có sẵn trên 11.10 vì nó sử dụng các phiên bản mới hơn. Hệ thống được xây dựng bằng cách sử dụng QMake.Biên dịch C++ cho các phiên bản Ubuntu khác nhau

Tôi đang tìm một hướng dẫn hoặc điểm khởi đầu để giải quyết các xung đột phụ thuộc này cho nhiều nền tảng Ubuntu.

+1

Câu hỏi hay, bạn có thể liên kết tĩnh hoặc gửi thư viện với ứng dụng và có trình khởi chạy/trình bao bọc sửa đổi LD_LIBRARY_PATH. Nhưng tôi hy vọng một người nào đó sẽ gõ một câu trả lời tốt hơn. –

+0

Có thể liên kết ngược lại, ví dụ, libboost_thread.so.1, miễn là tất cả 1.x.x có tương thích nhị phân không? Tôi không chắc chắn về thư viện đặc biệt này nhưng một số được phiên bản theo cách này. – rasmus

+0

@rasmus, Googling Tôi đã tìm thấy danh sách gửi thư từ năm 2009 nói rằng 'Không có khả năng tương thích nhị phân nào cả, tôi sợ.' dường như có khả năng tương thích nhị phân ngẫu nhiên nhưng không đảm bảo và ứng dụng phải liên kết với phiên bản chính xác. –

Trả lời

3

Nếu không ai khác cảm thấy thích xích đu, tôi cũng có thể tiêm thứ gì đó.

Tôi sẽ đưa ra một vài giả định.

  • Bạn đang phân phối một ứng dụng mã nguồn nhị phân/đóng
  • Bạn muốn phân phối nó cho mình

Do đó loại trừ toàn bộ "chỉ để cho các distro/người xây dựng nó cho các thiết lập của họ bản thân".

Nhìn vào cách người khác giải quyết các sự cố tương tự, tôi có thể thấy rằng các thư viện được chia sẻ với ứng dụng của bạn và sau đó sử dụng trình tải/trình bao, những gì bạn muốn gọi, kịch bản sửa đổi môi trường trước khi khởi chạy ứng dụng. Cụ thể là họ sửa đổi LD_LIBRARY_PATH để bao gồm thư mục/lib đi kèm với ứng dụng.

Tập lệnh có thể đơn giản như.

#!/bin/sh 

LD_LIBRARY_PATH=./lib ./myAppReal 

Đó là cách tôi giải quyết việc phân phối ứng dụng Qt4 cho người dùng có phân phối không giao hàng mới hơn Qt-3.3.6 (năm 2009 ... nghiêm túc). Chỉnh sửa: Cũng có thể nói bởi người dùng tôi có nghĩa là 5 người ở công ty trả tiền cho phát triển, thất bại đặc biệt về phía chúng tôi không yêu cầu họ cụ thể hơn khi họ nói nhiều nền tảng trên các hệ điều hành hiện đại.

Bây giờ ai đó có thể sẽ tìm thấy khoảng một chục điều sai trái với điều này, nhưng đó là tốt, tôi có thể cập nhật và tìm hiểu khi chúng tôi đi.

EDIT: Khi JimR cho biết điều này đi kèm với các tác động bảo mật, nếu bạn để thư mục libs trên thế giới có thể ghi một người nào đó có thể sử dụng nó để tiêm mã độc vào ứng dụng của bạn. Tùy thuộc vào cách bạn có kế hoạch triển khai nó có thể hay không là một vấn đề thực sự, nhưng bạn nên nhận thức được nó.

+0

Thư mục lib của bạn lớn đến mức nào? – rasmus

+0

Nếu bạn sử dụng phương pháp này, hãy đảm bảo bạn xem xét cẩn thận các quyền trên thư mục thư viện mà bạn thêm vào LD_LIBRARY_PATH. Bạn đang thiết lập cho mình các vấn đề bảo mật nếu thư viện có thể được tiêm vào mã của bạn. – JimR

+0

@rasmus, tôi thực sự không nhớ, QtGui là gì? 11MB? –

Các vấn đề liên quan