• ベストアンサー

ソースコードのコンパイルについて

ソースコードのコンパイルについて よくソースコードだけしか公開されていないソフトを見かけますが、これらはWindows, Mac, LinuxそれぞれでコンパイルすればそれらのOSで動くようになるのでしょうか?例えばCで書かれたソースコードをWindowsでコンパイルすればexeに自動的にコンパイルされ、MacでコンパイルすればMac用のバイナリに自動的にコンパイルされるのでしょうか? またMacにはLinuxのシェルがあったと思うのですが、MacでコンパイルしたものはLinuxで動きますか?またその逆はできるのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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)
回答No.4

いろいろなプラットフォームで通用するようにするには、それなりに注意を払ってプログラミングしなければ無理です。 また、ソースコードは互換性があっても、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)
回答No.3

標準入出力のみのソースなら多くの環境で動くでしょう 例:printf("Hello world"); 複雑なプログラムも移植性を考えられたソースなら可能ですね #ifdefの嵐のソースになりますが あとクロスコンパイルといってコンパイルとターゲット環境が違うのもありです

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

それぞれの OS 用にコンパイルできるものもあればできないものもある. GNU hello ならまずコンパイルできるはずだが, Windows の API を使っているようなものは Linux や Mac ではコンパイルできないだろう. たとえば「秀丸」を Linux でコンパイルすることは (ソースコードがあったとしても) 困難だろう. ところで最後の文章は意味不明. 「Linux のシェル」ってなに?

one-eyed
質問者

補足

Unix Shellといえばいいんでしょうか。WindowsのコマンドプロンプトでいうLinux版です。 MacはLinux Kernelを使っていてTerminalというUnix Shellが使えるアプリケーションがあるのでMacとLinuxでコンパイルされたソフトは互換性が高いのかどうか気になっていました。

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

よほど、良く考慮されていないと、一つのソースで複数のプラットホームには対応できないです。 ソースを公開していても、対応可能なプラットホームは限定されていると思いますけどね。 どこに書いてあるはず。

関連するQ&A

  • 逆コンパイル

    C#で書いた単純なプログラムをコンパイルして、それをテキストエディタで開いたところ、なんだかソースコードのような文字列がかなりそのまま実行バイナリの中に含まれています。 これって簡単に逆コンパイルとかされないでしょうか。 プログラムのバイナリを圧縮や暗号化して、実行時にそれを展開するような方法があると聞いたのですが、それはC#でもできますか? 別のプログラムは圧縮ファイルを解凍するような方法じゃなくて、1つのプログラム内でそういうことできませんか?

  • GPLソースのコンパイル、公開

    Linux用などでGPLで公開されているフリーウェアを Windows用にコンパイルして(Makeがうまくいったためしがないのですが) Windows用バイナリとしてGPLライセンスで公開や再配布 することは、著作権上問題ないでしょうか。 私は、問題ないと思っていますが、 このようなことをしている人をあまり見たことが ないので気になりました。

  • 一つのソースコードから複数のOSへ書き出しは可能?

    仮にWindowsでC/C++のソースコードを書いたとして それをMacやLinux用にWindwos内でビルドすることは可能なのでしょうか? JavaだったらJVMがよろしくやってくれて OSの違いを吸収してくれているのはわかります Qtも一つコードを書けば複数のOS用に書き出すことができますが それはどういった仕組みなっているのでしょうか? いろいろ調べたのですが、そういった記事などが見つからなかったので 今回質問させていただきました、よろしくお願いします。

  • 「逆コンパイル」ってできるんですか?

    自力なり、ツールをつかうなりして逆コンパイルすれば、EXE形式から、Cなどのプログラム言語に変換することができるんですよね。 そうすると、ソフトを作っている会社なんかは、自社が力をそそいで作ったプログラムを簡単に真似されたりすると思うんですけど、それでいいんでしょうか。 それから、 ウィンドウズのEXEから、ソースコードに変換することはできないんですか? すごい労力になるけど、やることは可能な気がするんですが。

  • コンパイルできない...

    学校のC言語のレポートを家でやろうと思ったのですが、ソースコードを変更していないのにコンパイル時にエラーがでます。おそらく環境の違いによるものだと思うのですが、そのへんには非常に疎いもので教えていただけないでしょうか? 実行したコンパイルは gcc -g -o abc abc.c fft.o -lm です。 学校はRed Hat Linuxで自宅はWindowsなのでcygwinを用いています。エラー文ではfft.oがうまく取り込めていないみたいです。

  •  逆コンパイル??

     逆コンパイル??  今晩は,質問させていただきます.どうぞよろしくお願いいたします. 以前ネットで「逆コンパイル」なる話を閲覧したことがございます. 例えばVB.NETでビルドしたExeファイルを公開する場合, 入手した人がこれの中身を少しでも変更できたり,コードを閲覧したり できるものなのでございましょうか??  もしお詳しい方がいらっしゃいましたら,どうぞよろしく お願いいたします.

  • Cソースをexeにコンパイルする

    Cソースをexeにコンパイルする http://freenx.berlios.de/download.phpに置いてあるfreenx-X.Y.Z.tar.gzをWindows上で動作するexeにコンパイルしたいのですが、うまくできませんでした。使用しているOSはWindows XPです。 cygwinをインストールしてtar.gzを展開したフォルダまで行き、makeを実行しましたが、以下のようなエラーがでました。 http://pastebin.com/bfQtMFyW この方法でexeにできるのかどうかも分からないのですが、もし別の方法があるなら教えてください。お願いします。

  • sygwinでのコンパイル方法

    linuxと同じような環境でできると聞いて,cygwinをインストールしたのですが,コンパイルしようにもどこにソースファイルを入れておくのかわかりません.ちなみに,OSはwindowsです.

  • 様々なソースコードを読みたい

    C/C++勉強中の者です。勉強の目的はVectorなどに登録できるようなレベルのフリーソフトを自分で開発することです。 C/C++の文法は一通り勉強し終えました。 次のステップとして、Cで書かれた様々なソフトウェアのソースコードを沢山読んでいきたいと思っています。フリーソフトの大半はソースコードは公開してないですし、、ソースコードはどこで入手すればよいのでしょうか。

  • C#でコンパイルしたクラスを逆コンパイル

    マイクロソフト .NET C#でコンパイルしたクラス(dll)があり、 元の最新のソースコードがなくなってしまったので、 dllから一部復元したいのですが、 dllからソースコードを復元(逆コンパイル)することは可能でしょうか? あるファイルのこの部分だけ、という形でもかまいません。

専門家に質問してみよう