質問: コンパイルに必要な最低限の環境を一つの実行可能な形式のファイルにまとめることはできますか? USBメモリーに入れて持ち運べるCコンパイラ環境がほしいと考えていて、なるべくUSBメモリから移動させるファイル数を減らしたいので1つのファイルにまとめたいです。 Cのコードをコンパイルして実行したいので、libcやヘッダーファイル、リンカなども必要です。 これらを1つの実行可能なファイルの中にまとめる方法はないのでしょうか? WindowsとLinuxでそれぞれ実行可能なファイルを作り、x64で動かすことを想定しています。 OSごとにファイルは分かれてもよいです。 このようなことは可能なのでしょうか? また、可能ならどのようにすればよいのでしょうか?
回答: あなたが自作プログラムで使いたい共有ライブラリ `libhoge.so` が、マシンAには入っているけどマシンBには入っていないとき、開発環境はポータブルにできたとしても、出来上がったプログラムをマシンBで動かすことは困難そうです。また、インストールされていないマシンに対応するため当該共有ライブラリの特定バージョンをその USB メモリに入れておくとしても、別のマシンにはその共有ライブラリの別バージョンが既にインストールされていてバージョン違いで動かないなんてのも大いにありそうです。 (実行環境には脆弱性解消済み新バージョンが既に入っているのに、脆弱性あり旧バージョンが USB メモリにあるようなとき、旧バージョンを使われては管理者としてはうれしくない) 仮に議題のこと(=持ち運び可能な開発環境)ができたとしても、それによって作ることのできるプログラムは最小限の機能しか使っていない HelloWorld くらいなものにとどまりそうな気がします。 このような「実行環境側の違い」を気にしないためには、「開発環境と実行環境を1セットにして持ち運ぶ」のが面倒が無い= USB メモリ上に Linux OS を構築して仮想マシン上で動かすのがよさそうということで、コメント欄で紹介されている記事はそうなっています。 実用面から行くと、安価な USB メモリをハードディスクっぽく使おうとしても読み書き性能が低すぎて実用にならないほど遅いなんてのが大いに想定されます。 結論を言うと * 開発環境だけをポータブルに持ち運べたとしても実用にならない可能性大 * 仮想マシンを使って開発環境+実行環境を同時に持ち運ぶなら可能そう * そこまでするなら対象マシンに開発環境入れちゃうほうが面倒なさそう