Làm cách nào để phân phối phần mềm khoa học của tôi với càng ít phụ thuộc càng tốt?


8

Là một phần trong nghiên cứu của tôi, tôi viết rất nhiều mã Python và MATLAB không bao giờ cần phải phân phối cho bất kỳ ai khác. Ngay cả khi tôi cần phân phối phần mềm của mình, Python và MATLAB, cả hai đều được diễn giải, làm cho việc chia sẻ nó tương đối đơn giản.

Bây giờ tôi đang viết một số phần mềm bằng C ++ mà tôi muốn phân phối. Tôi có cách xử lý cách biên dịch phần mềm trên máy của mình, nhưng điều tôi không hiểu là cần phải làm gì để cung cấp cho người khác phần mềm.

Đầu tiên, thêm về dự án của tôi: Tôi đang viết một số mã để tính toán và hiển thị trực quan hóa. Dự án dựa trên biểu đồ và vì vậy tôi đang sử dụng thư viện đồ thị LEMON. Tôi đang khám phá các triển khai VTK và OpenGL với mục đích hiển thị trực quan hóa. Tôi muốn viết các ràng buộc Python và MATLAB cho người dùng của các môi trường đó để có thể sử dụng phần mềm của tôi và tôi muốn sản xuất các phiên bản Windows và Linux (tôi chưa nghĩ về OS X ...).

Vì vậy, hãy lấy thư viện đồ thị LEMON làm ví dụ. Đó là một loạt các tiêu đề cùng với một đối tượng chia sẻ nhỏ. Trên hệ thống phát triển của mình, tôi biên dịch thư viện với CMake và liên kết nó với dự án của tôi.

Bây giờ nói rằng tôi muốn đưa phần mềm của mình cho ai đó đang chạy trên Windows. Tôi muốn họ có thể tải xuống trình cài đặt, nhấp vào một hoặc hai nút và có mọi thứ được chăm sóc. Tôi không muốn họ lo lắng về việc cài đặt thư viện LEMON hoặc OpenGL. Họ không nên cố tình biên dịch bất cứ điều gì. Điều này có thể không?

Tôi có một cảm giác như vậy, nhưng tôi đến ngắn khi tìm kiếm tài liệu tham khảo. Tôi có một ý tưởng mơ hồ rằng nếu tôi biên dịch nhị phân trên Windows thì tôi có thể phân phối nhị phân đó cho bất kỳ ai chạy HĐH Windows. Nhưng những gì về các thư viện tôi sử dụng? Tôi đoán tôi cần phải liên kết tĩnh chúng trên Windows và điều đó sẽ giải quyết vấn đề phụ thuộc ở đó. Nhưng trong tâm trí tôi đã đọc được rằng liên kết tĩnh không phải là thông lệ tốt (hay đây chỉ là trên Linux?)

Như bạn có thể nói, tôi có phần lạc lõng. Tôi đánh giá cao một người thích đi đúng hướng và một số tài liệu tham khảo để đọc nếu bạn tình cờ biết về bất kỳ!


5
Có một lời khuyên cho bạn: bắt đầu THỬ. Thực tế biên dịch một số gói, đi đến một máy tính khác và cố gắng chạy nó ở đó (chỉ sử dụng trình cài đặt sau khi bạn biết phải làm gì). Rửa sạch, lặp lại. Khám phá cài đặt trình biên dịch, tránh sử dụng các thư viện gỡ lỗi để phát hành, sử dụng theo dõi phụ thuộc.
Deer Hunter

@DeerHunter Tôi có thể đánh giá cao phương pháp thực nghiệm và tôi chắc chắn đã dành vài giờ để thử nghiệm và tìm kiếm. Điều đó nói rằng, tôi muốn biết liệu thậm chí có thể đóng gói, giả sử, VTK, với phần mềm của tôi để người dùng không phải cài đặt nó hoặc bất kỳ phụ thuộc nào của nó. Mỗi dự án tôi đã thấy sử dụng VTK đều yêu cầu người dùng cài đặt nó làm điều kiện tiên quyết. Có lẽ đó là câu trả lời của tôi.
jme

jme, có thể nếu bạn kiểm tra giấy phép và giấy phép cho phép điều này. Các phụ thuộc kèm theo được hỗ trợ trong tất cả các khung cài đặt chính.
Deer Hunter

1
Trên Linux, liên kết động được ưu tiên hơn, vì phần mềm quản lý gói đảm bảo chỉ có một bản sao của mỗi thư viện trong hệ thống. Nhưng trên Windows, chỉ cần liên kết tĩnh vì nó không có nhiều trình quản lý gói có thể sử dụng. Ngay cả trên Linux, tôi cũng liên kết tĩnh các công cụ không có trong kho gói tiêu chuẩn hoặc LSB để tương thích phân phối chéo. Chỉ cần đảm bảo rằng bạn được phép làm như vậy (LGPL dừng trên ranh giới liên kết động, do đó bạn không thể liên kết tĩnh, ví dụ Qt trong ứng dụng không phải LGPL).
Jan Hudec

1
@JanHudec trên windows bạn cũng có thể chỉ cần liên kết động và đặt tất cả các dll đã sử dụng vào cùng thư mục với exe
stijn

Câu trả lời:


2

Miễn là giấy phép của các thư viện VTK cho phép, bạn có thể viết một tập lệnh NSIS Installer (sẽ tạo một trình cài đặt có thể phân phối lại) sẽ cài đặt các thư viện VTK ở chế độ im lặng. Chế độ im lặng (nếu trình cài đặt VTK có cái này) sẽ cài đặt các thư viện mà không nhắc người dùng về bất kỳ đầu vào nào - đây là cách mà hầu hết các trình cài đặt trò chơi video hoạt động (phần mềm được yêu cầu được cài đặt mà không nhắc bạn đồng ý với các điều khoản sử dụng hoặc nơi cài đặt nó).

Tuy nhiên, chỉ cần cài đặt một cách mù quáng phần mềm bổ sung có thể khiến bạn rơi vào tình trạng pháp lý bấp bênh. Tôi không hoàn toàn chắc chắn về tính hợp pháp của nó, nhưng tôi đoán rằng bạn phải thông báo cho người dùng về tất cả các phần mềm bổ sung mà bạn sắp cài đặt trên máy của họ.

Ví dụ, một trong những trình cài đặt tôi đã viết kịch bản (đối với sản phẩm tôi làm việc) yêu cầu SQL Server 2005 phải được cài đặt cùng với tệp nhị phân. Trong tập lệnh cài đặt, nếu máy của người dùng không cài đặt phiên bản máy chủ SQL (hoặc phiên bản mới hơn), thì nó sẽ gọi tệp MSI cho SQL Server 2005 (được đóng gói trong trình cài đặt NSIS) bằng khóa / q. Thao tác này sẽ cài đặt máy chủ SQL với các cài đặt mặc định và tất cả những gì người dùng nhìn thấy là lời nhắc "cài đặt máy chủ SQL 2005" được đưa lên trong khi MSI hoạt động. Chúng tôi đưa ra quan điểm thông báo cho người dùng về điều này và cho họ lựa chọn cài đặt phần mềm của chúng tôi mà không cần phần mềm.

Bạn có thể tạo một sản phẩm sẽ xây dựng tất cả các thư viện cho bạn, sau đó gọi trình tạo kịch bản NSIS, nhưng tôi không chắc chắn. Tôi đã không nhìn sâu xuống lỗ thỏ cho NSIS, vì chúng tôi không tự động hóa các bản dựng trình cài đặt.

Tất nhiên, bạn có thể thay thế NSIS bằng bất kỳ môi trường tập lệnh cài đặt nào khác. Tôi chỉ sử dụng nó ở đây làm ví dụ, vì tôi có một chút kinh nghiệm với 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.