無題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
わくわくさん

無題

#1

投稿記事 by わくわくさん » 15年前

現在、ウィンドウズXPを使っているのですが、
ボーランドのC言語コンパイラでコンパイルした実行ファイルは
ウィンドウズでしか動かないのでしょうか。
マックやLinux上ではそのままでは動かせない

softya

Re:無題

#2

投稿記事 by softya » 15年前

はい。OSとのインターフェイスが違うため動きません。
MACやLinuxでコンパイルしなおす必要があります。

クロスプラットフォームなJava言語ならJavaVMが違いを吸収してくれます。

わくわくさん

Re:無題

#3

投稿記事 by わくわくさん » 15年前

なるほど。コンパイラのダウンロード時にwin用
とmac用など分けてあったのはそのためでしたか。
どうもありがとうです。解決!

たかぎ

Re:無題

#4

投稿記事 by たかぎ » 15年前

wineを使えばそのまま動くかと思います。

softya

Re:無題

#5

投稿記事 by softya » 15年前

>wineを使えばそのまま動くかと思います。
すいません、wineを忘れてました。
wineはWindowsAPIをシミュレートしてくれるので導入してもらえば動く可能性が高いです。
http://ja.wikipedia.org/wiki/Wine
ただ、DXライブラリを含めたDirectXを動かすには色々工夫が必要で、Windowsアプリの方も微妙な表示(似ても似つかない)になるものや操作不能、ハングアップがありえます。C言語の標準関数の範囲なら大半動くと思います。

わくわくさん

Re:無題

#6

投稿記事 by わくわくさん » 15年前

softya様

すみません、一度解決にしてしまったのですが、
よくわからないのでもう一度聞きます。
windowsというOSと、

ハードウェア、Cのコンパイラ、API、DirectX、DXライブラリ

これらの関係、繋がりがよくわかりません。
これら全てセットでwindows用ということになるののでしょうか?

OSがwindowsで、使用したコンパイラもwindows用ならば,
作られた実行ファイルも当然windowsでしか動かない、
さらにGUI用のwin32APIもwindows専用の関数なので、windowsでしかGUIが使えない、
DirectXも(これはよく知りませんが)windowsのためのグラフィック処理関数なので
windowsでしか動かない、DXライブラリもDirectXやwindowsに依存するので他のOSでは無理、
という事ですね?

そうすると、いわゆるjava言語みたいにプログラミング言語の開発環境そのものが
特定のOSに依存せずに仮想化されていて、マルチプラットフォーム対応のC言語系統というのは
今のところほとんどない、って感じですかね?

dic

Re:無題

#7

投稿記事 by dic » 15年前

>今のところほとんどない、って感じですかね?
wmwareで仮想マシンとしてマシンそのものを動かしてます

softya

Re:無題

#8

投稿記事 by softya » 15年前

>>今のところほとんどない、って感じですかね?
>wmwareで仮想マシンとしてマシンそのものを動かしてます

dicさん。WMwareのCPUを含めてパソコン全体を仮想化する仮想マシンとJava実行環境を仮想化するJavaVMはだいぶイメージが違いますので、説明もなしにいきなり持ち出すとわくわくさんが混乱されると思います。
とりあえず、ややこしくなるのでWMwareについては保留させてください(そもそも利用者の導入が簡単ではありません)。

>ハードウェア、Cのコンパイラ、API、DirectX、DXライブラリ

ここを説明しますと、
ハードウェア ← OS ← API(DirectX含む) ← 実行ファイル(C言語で作られれた機械語プログラム)
と階層が分かれます。
各OS専用のC言語のコンパイラはOS毎のAPIの実装に沿った実行ファイルを作成します。
※クロスコンパイルと言う違うCPUやOS向けの実行ファイルを作る方法も存在しますが今回は省略。

JavaVMは、
ハードウェア ← OS ← API ← JavaVM ← 実行ファイル(Javaで作られた)
となります。
この仕組のためJavaVMはAPIに合わせてOS毎に違うものが必要です。
Javaランタイムと呼ばれているものがそれですね。

>そうすると、いわゆるjava言語みたいにプログラミング言語の開発環境そのものが
>特定のOSに依存せずに仮想化されていて、マルチプラットフォーム対応のC言語系統というのは
>今のところほとんどない、って感じですかね?

マイクロソフトの.NETFrameWorkがJavaVMに似た仮想的な働きをします。
なので、C#やVB.NETをLinuxで動かすオープンソースプロジェクトが存在します。
MonoDevelop
http://ja.wikipedia.org/wiki/MonoDevelop

C言語自体は思い当たりませんでした。
ただ、JavaVM上で動く言語が幾つか存在しますので、もしかしたらC言語版を開発しているオープンソースプロジェクトがあるかも知れません。 画像

438番

Re:無題

#9

投稿記事 by 438番 » 15年前

>関数がwindows専用
>windowsでしかGUIが使えない
というより正式には
WindowsAPIというのはwindowsの機能を呼び出すための関数セットのことです
したがってGUIうんぬんではなくwindowsでしか動きません

wineはわかりやすく言うとLinuxでwindowsを動かすようなものです
確かエミュレータだったはず
ですのでLinuxでもwindowsのプログラムが動きます
その代わりに動作がめちゃくちゃ重いです

Microsoft DirectX
その名の通りDirectXはwindowsに搭載されています
Linuxで動かないのはDirectXが搭載されていないからです
ですのでwindowsだからといってXP等の古いものでは最新のDirectXは搭載されていないので動きません
最新のDirectXを導入するためには、対応したOSが必要になります

DXライブラリはこれら(windowsAPIとDirectX)
での開発を支援するものだったはずなので
>DXライブラリもDirectXやwindowsに依存するので他のOSでは無理、
という事ですね?
その解釈で合っているはずです

わくわくさん

Re:無題

#10

投稿記事 by わくわくさん » 15年前

>dic様

wmware
OSのエミュレータみたいなものですか、一応知識としては覚えておきます。

>softya様

詳しい回答ありがとうございます。
なるほど、個人的にはC言語のVMができるといいです。
では再び解決とします。

皆様ありがとうございました。

たかぎ

Re:無題

#11

投稿記事 by たかぎ » 15年前

Wineは意外に早いですよ(もちろん、ネイティブに勝るはずはありません)。
Windows上のCygwinとLinuxやMac上のWineではどちらが早いのか知りませんが...

私は普段、Mac上でVMware Fusionを使ってWindows XPやVistaを動かしていますが、十分快適です。
とくにXPは快適で、その上でVisual Studio 2005を動かし、さらにWindows Mobileのエミュレータを動かして開発していたりします。

あと、VMware Fusionにはユニティモードというのがあって、これを使うと普通にMacからWindowsのプログラムを実行できるようになります。さらに、Mac上のファイルにWindowsのプログラムを関連づけることもできます。

閉鎖

“C言語何でも質問掲示板” へ戻る