- ベストアンサー
ソースコードのコンパイルについて
ソースコードのコンパイルについて よくソースコードだけしか公開されていないソフトを見かけますが、これらはWindows, Mac, LinuxそれぞれでコンパイルすればそれらのOSで動くようになるのでしょうか?例えばCで書かれたソースコードをWindowsでコンパイルすればexeに自動的にコンパイルされ、MacでコンパイルすればMac用のバイナリに自動的にコンパイルされるのでしょうか? またMacにはLinuxのシェルがあったと思うのですが、MacでコンパイルしたものはLinuxで動きますか?またその逆はできるのでしょうか。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
> よくソースコードだけしか公開されていないソフトを見かけますが、これらはWindows, Mac, LinuxそれぞれでコンパイルすればそれらのOSで動くようになるのでしょうか? C言語で書かれたソースのみというソフトはほとんど見かけません。 Unix系のソフトだとconfigureやxmkmf・imakeなどを使って構築環境との整合をとりコンパイルする(コンパイルの前にシェルスクリプトやm4, makedependなどの前処理を行う)ソフトがほとんどなのでそれらの動く環境でないと構築は面倒です。 > 例えばCで書かれたソースコードをWindowsでコンパイルすればexeに自動的にコンパイルされ、MacでコンパイルすればMac用のバイナリに自動的にコンパイルされるのでしょうか? C言語の教科書にでているようなコンソールアプリでC言語の規格のみ(言語仕様と標準ライブラリ)使っているようなソフトだとそういう事もありますが、通常のソフトは大抵様々な環境に依存した部分が含まれてますので公開されているソースコードの前提としている環境を整えて構築する必要があります。 同じWindows用といっても、xx C用のソースはyy Cではコンパイルできない(動かす為には一部を書き換える調整が必要)といった事もあります。 > またMacにはLinuxのシェルがあったと思うのですが、MacでコンパイルしたものはLinuxで動きますか?またその逆はできるのでしょうか。 MacはCMU Machを基盤に(NeXTからMac OS Xで色々カスタマイズされ変わっているでしょうが)、中間層にBSDを加えて作られているOSなのでMacでコンパイルしたものはLinuxでは動きません。 MacにはMac on LinuxというLinux互換環境がありますので、それを使えばLinuxで動くソフトも作れるでしょう。 ※ Linuxの開発環境を整える必要はあるでしょうが。 Linuxと一言で書かれてますが、Linux同士でもコンパイル済みバイナリは使っているライブラリのバージョンが違えば動かなかったりするので動かす為には調整が必要な場合は多いですよ。 ※ ソースから構築した方が良い。古いセキュリティリスクのあるかも知れないライブラリ入れたくはないだろうし、確認も面倒だし。 Linux同士であれMacのLinuxエミュレーション環境とLinuxであれ、コンパイル済みのバイナリを他のシステムで動かそうと思うとライブラリの調整などは必要となります。必ず手軽に動くとは考えない方が良いでしょう。 手間をかければ動かない事はないでしょうが。
その他の回答 (4)
- jacta
- ベストアンサー率26% (845/3158)
いろいろなプラットフォームで通用するようにするには、それなりに注意を払ってプログラミングしなければ無理です。 また、ソースコードは互換性があっても、Makefileやプロジェクトのようなビルド環境はそれぞれについて用意しなければなりません。 さらに、ソースコードの日本語を使っている場合は、文字コードの変換が必要になることもおおいはずです。 コマンドラインしか使わなければ、比較的移植性を持たせることは楽ですが、GUIがある場合でもできないわけではありません。 例えば、 #include <tk.h> char script[] = "button .b -text exit -command exit\n" "pack .b"; int main(int argc, char* argv[]) { Tcl_Interp* interp = Tcl_CreateInterp(); Tcl_FindExecutable(argv[0]); Tcl_Init(interp); Tk_Init(interp); Tcl_Eval(interp, script); Tk_MainLoop(); return 0; } こんな風に、マルチプラットフォームのツールキットを使えば、いろいろなプラットフォームで動くGUIを作ることができます。
- php504
- ベストアンサー率42% (926/2160)
標準入出力のみのソースなら多くの環境で動くでしょう 例:printf("Hello world"); 複雑なプログラムも移植性を考えられたソースなら可能ですね #ifdefの嵐のソースになりますが あとクロスコンパイルといってコンパイルとターゲット環境が違うのもありです
- Tacosan
- ベストアンサー率23% (3656/15482)
それぞれの OS 用にコンパイルできるものもあればできないものもある. GNU hello ならまずコンパイルできるはずだが, Windows の API を使っているようなものは Linux や Mac ではコンパイルできないだろう. たとえば「秀丸」を Linux でコンパイルすることは (ソースコードがあったとしても) 困難だろう. ところで最後の文章は意味不明. 「Linux のシェル」ってなに?
- SaKaKashi
- ベストアンサー率24% (755/3136)
よほど、良く考慮されていないと、一つのソースで複数のプラットホームには対応できないです。 ソースを公開していても、対応可能なプラットホームは限定されていると思いますけどね。 どこに書いてあるはず。
補足
Unix Shellといえばいいんでしょうか。WindowsのコマンドプロンプトでいうLinux版です。 MacはLinux Kernelを使っていてTerminalというUnix Shellが使えるアプリケーションがあるのでMacとLinuxでコンパイルされたソフトは互換性が高いのかどうか気になっていました。