ソースコードのコンパイルについて
よくソースコードだけしか公開されていないソフトを見かけますが、これらは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であれ、コンパイル済みのバイナリを他のシステムで動かそうと思うとライブラリの調整などは必要となります。必ず手軽に動くとは考えない方が良いでしょう。
手間をかければ動かない事はないでしょうが。
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を作ることができます。
No.3
- 回答日時:
標準入出力のみのソースなら多くの環境で動くでしょう
例:printf("Hello world");
複雑なプログラムも移植性を考えられたソースなら可能ですね
#ifdefの嵐のソースになりますが
あとクロスコンパイルといってコンパイルとターゲット環境が違うのもありです
No.2
- 回答日時:
それぞれの OS 用にコンパイルできるものもあればできないものもある. GNU hello ならまずコンパイルできるはずだが, Windows の API を使っているようなものは Linux や Mac ではコンパイルできないだろう. たとえば「秀丸」を Linux でコンパイルすることは (ソースコードがあったとしても) 困難だろう.
ところで最後の文章は意味不明. 「Linux のシェル」ってなに?
この回答への補足
Unix Shellといえばいいんでしょうか。WindowsのコマンドプロンプトでいうLinux版です。
MacはLinux Kernelを使っていてTerminalというUnix Shellが使えるアプリケーションがあるのでMacとLinuxでコンパイルされたソフトは互換性が高いのかどうか気になっていました。
No.1
- 回答日時:
よほど、良く考慮されていないと、一つのソースで複数のプラットホームには対応できないです。
ソースを公開していても、対応可能なプラットホームは限定されていると思いますけどね。
どこに書いてあるはず。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アプリケーションのDLLファイル...
-
<unistd.h>をVisualStudioでつ...
-
CMakeでfortranをコンパイルしたい
-
ぷよまんは もう売ってないの?
-
C90とC99の計算結果の違い?
-
メモリへの負荷
-
Windows+Cygwin上でのmipsのク...
-
PIC同士のシリアル通信について
-
__attribute__(warning)
-
C++プログラム実行時エラー
-
セグメンテーション違反について
-
LiEというプログラムを使いたい...
-
バブルソート:ポインタで並び...
-
初歩の初歩
-
cygwin プログラミング コンパ...
-
latex cite, ref
-
プレコンパイルの意味を教えて...
-
64ビットのlinuxで32ビットメモ...
-
再起動しないとADOが使えなくな...
-
math.hに含まれる関数が使えない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アプリケーションのDLLファイル...
-
<unistd.h>をVisualStudioでつ...
-
すべてのリビルド: 0 正常、 0 ...
-
lhafileをインストールしたい
-
C#で char型とstring型の比較で...
-
gcc コンパイル killed
-
[COBOL] ソースの復帰
-
c言語です コンパイルした時に...
-
実行後にコンパイルに失敗しま...
-
共有ライブラリの内容確認について
-
ビープ音が鳴りません・・・
-
gcc バージョン違いによるコン...
-
64ビットのlinuxで32ビットメモ...
-
NASMとMASMの違い
-
C言語で作ったらWindowsでもMac...
-
math.hに含まれる関数が使えない
-
MVSマシンで0C7でABENDしたので...
-
ccとgcc
-
「インクルードファイル 'pthre...
-
自作DLLの中身を暗号化
おすすめ情報