![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
これから、Linux OSでC言語のプログラミングを行うことになりました。ディストリビューションはVine Linux 3.2 を利用します。
開発方法としては、Windows Xp 上でgccを利用できるIDE(Dev-C++ 4.9.9.2を利用します)で開発を行い(テスト的にコンパイル)、できたソースをLinux上でコンパイル・リンクするという方法で行おうと考えています。
そこで、疑問があります。
ANSIライブラリの中にはシステムコールを実行するものがあると思います。システムコールはOSの一部の機能ということですので、WindowsとLinuxとでは当然その機能は違ってくると思います。
つまり、WindowsでANSIライブラリを利用して実装したプログラム(コンパイルもとおる)がLinux上で正常に機能するのか(そもそもコンパイルがとおるか)がわかりません。
どなたかご教授いただけましたら幸いです。
宜しくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
ISO C として規格に書かれた範囲でプログラムを作っている限り, どんな環境でも「ソースはそのまま」使えます.... というか, 「規格」って「このように書いたらこのように動作する」ということを保証するためのものです. 動作さえきちんとしていれば, 「内部実装がどうなっているか」は (ISO C としての) 規格には全くありません.
って, 規格を 1度読んでみたらわかると思うんだけどなぁ.
No.2
- 回答日時:
全部Linux上で開発、という訳には行かないんでしょうか?
そうすれば質問のような事を気にする必要はなくなりますし、gccの使えるIDEならEclipse/CDTでいいんじゃないかって気がするのですが。
それはさておき。
同じ関数で同じ呼び方をすればどんなOSでも(だいたい)同じ動作を示すためにそういったライブラリがあるのです。
#だから内部実装は各OSで当然違いますし必要とあればシステムコールだって使います
従って「基本的にはコンパイルは通るし正常に機能する」という回答になります。
ただし規格上実装依存となっている部分や都合により規格に合わせられていない部分等があることがあり、これらによりOS間で動作に違いが出ることはあります。
この回答への補足
早速のご回答ありがとうございます。
>全部Linux上で開発、という訳には行かないんでしょうか?
→はい、可能です。
>#だから内部実装は各OSで当然違いますし必要とあればシステムコールだって使います
→同じライブラリ関数(例えばfopenなど)も内部的なつくりはOSごとに異なるということでしょうか。私はてっきり、ANSIライブラリの内部実装は固定だと思っていました。だからこそ、そのライブラリ内部から利用するシステムコール部分のつくりがどうなっているか(同じつくりなのにOSが違っても機能するか)と気になっておりました。
なるほど、OSごとにライブラリの内部実装が異なっているのであれば納得です。
ありがとうございました。
No.1
- 回答日時:
ANSIの範囲でプログラムを組んでいる場合は、ソースレベルで互換性があります。
つまり、Windows版のgccを使った場合(Cygwinになると思います)はWindows(DOS)のシステムコールが利用され、Linux版のgccを使った場合は、Linuxのシステムコールが利用されます。
例えば、コンソールプログラムでよく利用するprintf()ですが、当然、どちらのgccでもコンパイルできます。
それぞれのOSの元のコンパイラででき上がった実行形式は、そのOSで実行することができます。
これは、OSの違いはおろか、ハードウェアの違いも関係ありません。
Intel系でもMotorola系でもなんでも動きます。
しかし、実行形式を別OSに持っていくと実行できません(バイナリ互換ではない)。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(OS) Windowsの古いゲーム(32bit OSの時代のもの)を、 現行のWin11機でプレイしたい。 4 2023/08/01 08:22
- UNIX・Linux VertualBox でのLinux Mint の活用方法について教えてください 4 2023/08/06 10:34
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- デスクトップパソコン OSとストレージについて 5 2023/01/19 20:01
- その他(パソコン・スマホ・電化製品) LINUXPCに詳しい人に気楽に答えてほしい質問です。 2 2022/10/25 08:07
- UNIX・Linux VirtualBox ゲストOSにPC内蔵HDDのパーティションをマウントする方法は? 2 2023/05/06 22:52
- UNIX・Linux Ubuntuのアプリ版?が起動しません 1 2022/04/29 16:56
- 中国語 新しいMS-Windows OSの度に多大な出費 自作PCでLinuxOS・挑戦したい新OS 1 2022/07/05 14:32
- UNIX・Linux Zabbix監視エージェントをインストールしてもデータを収集できずアクティブにならない 1 2023/02/26 20:25
- その他(ブラウザ) Chromium の拡張機能にLINEってありますか? 1 2022/08/10 16:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
-
<math.h>ヘッダを入力している...
-
共有ライブラリの内容確認について
-
math.hに含まれる関数が使えない
-
MVSマシンで0C7でABENDしたので...
-
実行後にコンパイルに失敗しま...
-
プレコンパイルの意味を教えて...
-
C言語で作ったらWindowsでもMac...
-
Verilog_HDLでのdefineとifdef
-
EXEファイルの逆コンパイル
-
CLRアプリと通常のアプリとの違い
-
「逆コンパイル」ってできるん...
-
C言語で作ったプログラムを他の...
-
[COBOL] ソースの復帰
-
WindowsでのC と LinuxでのC...
-
gcc コンパイル killed
-
latex cite, ref
-
VS2010環境で2点ほど質問
-
C言語のグローバル変数の初期...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
-
math.hに含まれる関数が使えない
-
実行後にコンパイルに失敗しま...
-
c言語です コンパイルした時に...
-
ビープ音が鳴りません・・・
-
共有ライブラリの内容確認について
-
C言語をコンパイルするとコンピ...
-
すべてのリビルド: 0 正常、 0 ...
-
Verilog_HDLでのdefineとifdef
-
C#で char型とstring型の比較で...
-
64ビットのlinuxで32ビットメモ...
-
gcc コンパイル killed
-
#If True Then の # って何??
-
プレコンパイルの意味を教えて...
-
[COBOL] ソースの復帰
-
<math.h>ヘッダを入力している...
-
C言語で作ったらWindowsでもMac...
-
ヘッダーファイル『windows.h』...
-
define文のパラメータを実行時...
おすすめ情報