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


8

私の研究の一環として、他人に配布する必要のないPythonおよびMATLABコードを多数記述しています。ソフトウェアを配布する必要がある場合でも、PythonとMATLABの両方が解釈されるため、共有が比較的簡単になります。

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

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

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

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

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

ご存知のように、私は少し迷っています。私は正しい方向に微調整し、何かを知っていたら読んだ参考文献をいただければ幸いです!


5
あなたへのアドバイスを得ました:TRYINGを始めましょう。実際にいくつかのパッケージをコンパイルし、別のコンピューターに移動して、そこで実行してみてください(インストーラーは、何をすべきかわかった後でのみ使用してください)。すすぎ、繰り返します。コンパイラー設定を調べ、リリース用のデバッグライブラリの使用を避け、依存関係追跡を使用します。
ディアハンター

@DeerHunter経験的なアプローチに感謝し、数時間かけて実験と検索を行ってきました。そうは言っても、ユーザーがソフトウェアやその依存関係をインストールする必要がないように、ソフトウェアと一緒に、たとえばVTKをパッケージ化することさえ可能かどうか知りたいのです。私が見たVTKを使用するすべてのプロジェクトは、前提条件としてインストールするようにユーザーに要求します。多分それが私の答えです。
jme 2013

jme、ライセンスをチェックして、ライセンスがこれを許可している場合は可能です。バンドルされた依存関係は、すべての主要なインストーラフレームワークでサポートされています。
ディアハンター

1
Linuxでは、パッケージ管理ソフトウェアがシステム内の各ライブラリのコピーを1つだけ確実にするため、動的リンクが推奨されます。ただし、Windowsでは、使用可能なパッケージマネージャがあまりないため、静的にリンクするだけです。Linuxでも、標準のパッケージリポジトリにないもの、またはクロスディストリビューションの互換性のためにLSBにないものを静的にリンクします。許可されていることを確認してください(LGPLは動的リンク境界で停止するため、非LGPLアプリケーションでQtなどの静的リンクを行うことはできません)。
Jan Hudec 2013

1
@JanHudec Windowsでは、動的にリンクして、使用されているすべてのDLLをexeと同じディレクトリに配置することもできます
stijn

回答:


2

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

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.