web-dev-qa-db-ja.com

依存関係をできるだけ少なくして科学ソフトウェアを配布するにはどうすればよいですか?

私の研究の一環として、Pythonおよび他の誰にも配布する必要のないMATLABコードをたくさん書いています。ソフトウェアを配布する必要がある場合でも、PythonとMATLABはどちらも解釈されるため、共有が比較的簡単になります。

現在、配布したいソフトウェアをC++で作成しています。私は自分のマシンでソフトウェアをコンパイルする方法を理解していますが、他の人にソフトウェアを提供するために何をする必要があるかを理解していません。

まず、プロジェクトの詳細:視覚化を計算して表示するためのコードを書いています。プロジェクトはグラフベースなので、LEMONグラフライブラリを使用しています。視覚化を表示する目的でVTKとOpenGLの実装を調査しています。これらの環境のユーザーが自分のソフトウェアを使用できるようにPythonおよびMATLABバインディングを記述し、WindowsおよびLinuxバージョンを作成したいと考えています(私は考えていません) OS Xまだ...)。

それでは、レモングラフライブラリを例に考えてみましょう。これは、小さな共有オブジェクトを伴う一連のヘッダーです。開発システムでは、CMakeを使用してライブラリをコンパイルし、プロジェクトにリンクします。

次に、Windowsで実行している誰かにソフトウェアを提供したいとします。インストーラーをダウンロードし、ボタンを1つまたは2つクリックして、すべてを処理できるようにしてほしい。レモンライブラリやOpenGLのインストールについて心配してほしくありません。彼らは意図的に何かをコンパイルする必要はありません。これは可能ですか?

私はそれを感じていますが、参考文献を検索するときに不足します。 Windowsでバイナリをコンパイルすると、Windows OSを実行している誰にでもそのバイナリを配布できるはずだという漠然とした考えがあります。しかし、私が使用するライブラリはどうですか? Windowsでそれらを静的にリンクする必要があると思います。これにより、依存関係の問題が解決されます。しかし、私の心の奥で、静的リンクは良い習慣ではないことを読んだことがあります(または、これはLinux上だけですか?

ご存知のように、私は少し迷っています。ナッジを正しい方向に進めていただければ幸いです。

8
jme

VTKライブラリのライセンスで許可されている限り、VTKライブラリをクワイエットモードでインストールする NSISインストーラスクリプト (再配布可能なインストーラを作成します)を記述できる場合があります。クワイエットモード(VTKインストーラーにこれがある場合)は、ユーザーに入力を求めるプロンプトを表示せずにライブラリーをインストールします-これがほとんどのビデオゲームインストーラーの動作方法です(必要なソフトウェアは、使用条件への同意やインストール場所の確認を求めずにインストールされます)それ)。

ただし、追加のソフトウェアを盲目的にインストールすると、法的に不安定な立場に置かれる可能性があります。その合法性については完全にはわかりませんが、マシンにインストールしようとしている追加のソフトウェアをすべてユーザーに通知する必要があると思います。

例として、私がスクリプトを作成したインストーラー(私が作業している製品の1つ)には、SQL Server 2005がバイナリーと共にインストールされている必要があります。インストールスクリプトで、ユーザーのマシンに必要なバージョンのSQLサーバー(またはそれ以降)がインストールされていない場合、/ qスイッチを使用してSQL Server 2005のMSIファイル(NSISインストーラー内にパッケージ化されています)を呼び出します。これにより、SQLサーバーがデフォルト設定でインストールされ、MSIが機能しているときにスローされる「SQLサーバー2005のインストール」プロンプトがすべてのユーザーに表示されます。これについてユーザーに通知し、それなしでソフトウェアをインストールする選択をユーザーに与えることを目的としています。

すべてのライブラリをビルドするmakeを作成してから、NSISスクリプトビルダーを呼び出すこともできますが、よくわかりません。私たちはインストーラーのビルドを自動化していないので、NSISのうさぎの穴までそれほど遠くを見ていません。

もちろん、NSISを他のインストーラスクリプト環境に置き換えることができます。少し経験があるため、ここでは例としてのみ使用しました。

2
Jamie Taylor