みなさんは、Linuxにおいて、C言語をコンパイルするときはどのようにしていますか?
超初心者的な質問ですみません。わからないのです。
ちなみに、Red Hatの7.1 を使っています。
できれば、一番簡単なHello World!プログラムを使って説明していただけないでしょうか。

makeコマンド?の意味もわからないので、できればわかりやすく、説明してください。
いろいろと、すみません。
どうか、お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

natural> Hello World!の様な小さなプログラムであればgcc単体で行った方が簡単です。



これは、大きな誤解なんだなあ。例えば、

% gcc -o sample sample.c

に相当することを make を使ってやるのだったら

% make sample

で良いんですね。Makefile というファイルを作らなくても良いんです。

make は、元になるファイルから何かのコマンド(複数でも良い)を実行して、
あるファイルを作成するということを、なるべく楽に出来るように作られている
コマンドです。

元のファイル→出来上がるファイルの関係がありますから、もし、元のファイルが
出来上がるファイルよりも新しければ、もう一度「作る」ってことをしなくては
いけない、ということをなるべく機械的に実行できます。

ちょっと複雑になると、元になるファイルが複数あるとか、C言語の include の
ように、元になるファイルがあるファイルの記述を参照しているとか、そういった
関係も出てくるので、そのファイルの関係や、実行するコマンドやパラメータを
Makefile というファイルに記述して make に教えてあげることができます。

どんなファイルでも良いようになっているのですが、よくある場面として、
ソースファイルから実行プログラムを作る、というのがあるので、そのうち
メジャーな言語については「デフォルトの推論規則」っていうのがあって、
決まったパターンであれば、Makefile さえ作る必要がありません。

例えば、C言語だったら sample.c というソースを作れば、sample という
実行プログラムを作るのがデフォルトの推論規則として、既に make が持って
います。
    • good
    • 0
この回答へのお礼

なるほど、よくわかりました。
どうも、ご親切にありがとうございました

お礼日時:2001/09/13 07:44

makeコマンドの存在をしっているのであればまずman makeとかman gccとかするべきでしょう。



manにはmake.texinfoを見よと書いてあると思うのでmakeのソースを入手してinfo形式もしくはdvi形式のファイルを作れば詳しいことがわかります。(ただし、英語)

ソースの入手方法やtexinfo形式ファイルの処理方法は別途勉強してください。

もし、英語では読みこなせないばあいは書籍をさがすしかないかな。
    • good
    • 0
この回答へのお礼

なるほど、よくわかりました。
どうも、ご親切にありがとうございました

お礼日時:2001/09/13 07:43

コマンドラインでgccを使用してコンパイルします。



# gcc -o sample sample.c (#はプロンプト)

といった感じでしょうか。
"-o sample"は実行ファイル名をsampleという名前にするように指定しています。
これを付けないとa.outという名前の実行ファイルになってしまいます。
尚、makeはMakefileの記述を解釈・実行するコマンドで、Makefileにはコンパイル・リンクの手順を記述しておきます。
Hello World!の様な小さなプログラムであればgcc単体で行った方が簡単です。
makeに関しては参考URLをご覧下さい。

#RedHatにはgccが標準で入っているはずですが、見つからない場合はfind
#コマンド等で探し、pathを通して再実行してください。
#それでも見つからない場合はインストールディスクの何処か、または
#ネット上から探してくることになります。

参考URL:http://tanaka-www.cs.titech.ac.jp/~euske/doc/mak …
    • good
    • 0
この回答へのお礼

なるほど、よくわかりました。
どうも、ご親切にありがとうございました。

お礼日時:2001/09/13 07:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qコンパイル環境の違いによる、浮動少数点の違い

不動少数(float)を使った、c言語の演算プログラムを作っています。

Aマシン(CentOS5, gcc3.4)でコンパイルした、"test_a.so"と"test_a.a"について、
Aマシンで実行した結果、両者の結果は一致します。

Bマシン(Fedora5, gcc3.0)でコンパイルした、"test_b.so"と"test_b.a"について、
Bマシンで実行した結果、両者の結果は一致します。
Aマシンで実行した結果、両者の結果が異なります。

結果の比較をすると、以下のようになります。
"test_a.so"=="test_a.a"!="test_b.so"!="test_b.a"

(1)コンパイル環境と実行環境が違うと、浮動少数の演算に違いがでることがありますか?
(2)コンパイル環境と実行環境が違うと、so と aに違いがでることがありますか?

上記2点について、ご存知の方いらっしゃいましたら教えてください。
お願い致します。

Aベストアンサー

ちなみに、
"test_a.so"と"test_a.a"をBマシンで実行した結果はどうなりますか?

理屈だけで言えば、
・コンパイルラによるの構文解析及び変換処理の違い
・実行ファイルが使用する浮動小数点ライブラリの違い
で結果が変わる可能性はあります。

QRed Hat7.1のインターネット接続について

パソコン初心者です。Windows Me が入ってるPCにRed Hat7.1を本に書いてあるとおりにインストールしてマルチブート環境にしました。ダイヤルアップ接続はうまくいったと思うのですが、Netscapeを起動したところ、インターネットには接続されません。どうやら、DNSが正しく設定されてないようなのですが(多分・・・)、どのように設定すればいいのかわかりません。どうか、教えてください。お願いします。

Aベストアンサー

この情報だけでは、回答するのは難しいと思います。
マルチブート環境と言う所は、余り今回の問題とは関係ないと思いますがWindows環境では接続出来ていて、Red Hat7.1では接続出来ないと考えてよろしいでしょうか?

■足りない情報としては、以下のものが有ると思います。

・参考にした本に書いてあるかもしれませんが、ダイアルアップ接続に使っているアプリケーションは、何を使っていてどんな設定を行ったのでしょうか?
(設定方法が分かないと間違いを見つけられません。勿論、個人情報には触れないような表現で書いてください。)

・モデムは何を使っているのでしょうか。(ダイアルアップが成功していれば問題ないかもしれませんが)

・Red Hat7.1側のダイアルアップがらみの設定は何を行っていますか?
(ダイアルアップ関係で、参考にした本に書いてあることを書いてもいいと思います。)

・また、お使いのプロバイダーのダイアルアップ時の設定方法はどのようになっていますか?


【DNSサーバについて】

...本題のDNSサーバーについてですが、とりあえず見つかった本に書いて有った事が参考になるかもしれませんので、書いておきます。

例えば、ダイアルアップにppxpを使っている場合には、クイックダイアルアップの詳細設定画面でresolv.confの作成にチェックがされていて、かつ接続相手のPPPサーバーがネームを教えてくれるならば/etc/resolv.confが作られるようです。
しかし、接続相手がこれを通知してくれない場合には明示的にネームサーバを設定する必要があるようです。
普通は、ISPからの書類などにDNSサーバーのIPアドレスについての記述があるようです。
自分では、継げていないのではっきりぢた事はいえないのですが。

/etc/resolv.confと言うのはどのネームサーバを参照するかなど、DNS関連ンの設定を行うファイルで、
nameserverに続けて参照するネームサーバのIPアドレスが記述されています。

この情報だけでは、回答するのは難しいと思います。
マルチブート環境と言う所は、余り今回の問題とは関係ないと思いますがWindows環境では接続出来ていて、Red Hat7.1では接続出来ないと考えてよろしいでしょうか?

■足りない情報としては、以下のものが有ると思います。

・参考にした本に書いてあるかもしれませんが、ダイアルアップ接続に使っているアプリケーションは、何を使っていてどんな設定を行ったのでしょうか?
(設定方法が分かないと間違いを見つけられません。勿論、個人情報には触れない...続きを読む

Qビルドとコンパイルの違い

ビルドとコンパイルの違いがわかりません。
ご存知の方がいらっしゃいましたら教えていただけるとありがたいです。よろしくお願いいたします。

Aベストアンサー

ビルド=コンパイル+リンク
コンパイル=ソースコードを解析し、オブジェクトファイルを作成すること。
リンク=上記のオブジェクトファイルにライブラリを結合し、実行可能ファイルを作成すること。

QRed Hat7.1 のマウスについて

僕は、Linuxの初心者です。
3ボタンマウスの事でお聞きしたいのですが、
マウスの真中のボタンのスクロール機能が使えません。
Windowsの環境では、使えるのですが、Linuxではどのようにしたら、使えるようになるのか、教えてください。お願いします。

Aベストアンサー

XFree86の設定が悪いんではないですかね。

インストール中にマウス選択の画面が出てきて,
マウスが選べませんでしたか?最近RHは使って
無いんでよく覚えてませんが。

Xサーバ(何もいじってないならXFree86)の
再設定をすれば使えると思いますが。ちなみに、
XサーバとはLinuxをGUIにするためのものです。

rootになって、Xconfiguratorと打ち込めば、
Xの設定ができます。この中のマウス選択の
ところで、IMPS/2を選んで見てください。

あるいは、/etc/X11/XF86Config(または、
/usr/X11R6/lib/X11/XF86Config)の以下の
部分を以下のように変更します。

Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Device" "/dev/mouse"
Option "Protocol" "IMPS/2"
Option "Emulate3Buttons" "off"
Option "ZAxisMapping" "4 5"
EndSection

"Protocol'の行の"IMPS/2"が違ってたらそのように直す。
"ZAxisMapping"の行が無かったら追加する。
"Emulate3Buttons"の行が存在して、かつoffじゃなかったら
offにしてください。
その他の行はいじらないでください。

どちらの方法も、設定の後でリブート(またはXの再起動)を
してください。

ただ、設定を失敗してマウスが利かない、ちょっと触った
だけでポインタがすごい勢いでどっかに飛んでいく、などの
症状になることがありますので、変更前の状態に戻せるように
工夫してください。

ただ、これをやっても全てのアプリケーションで
ホイールが使えるようになるとは限りません。
アプリケーションの方でサポートされてなかったり、
アプリケーション側で設定が必要だったりします。

参考URL:http://voyager.ise.osaka-sandai.ac.jp/JF/JFdocs/mouse-wheel-scroll.html

XFree86の設定が悪いんではないですかね。

インストール中にマウス選択の画面が出てきて,
マウスが選べませんでしたか?最近RHは使って
無いんでよく覚えてませんが。

Xサーバ(何もいじってないならXFree86)の
再設定をすれば使えると思いますが。ちなみに、
XサーバとはLinuxをGUIにするためのものです。

rootになって、Xconfiguratorと打ち込めば、
Xの設定ができます。この中のマウス選択の
ところで、IMPS/2を選んで見てください。

あるいは、/etc/X11/XF86Config(または、
/usr...続きを読む

Qコンパイル言語とインタープリター言語の違いについて

コンパイルするプログラミング言語とインタープリターする
プログラミング言語の違いについて教えてください。
特に、開発上および運営上の利点・欠点についてお願いします。

また、CGIでは、PHPやPERLなどのインタープリター言語が
主流ですが、その理由とC言語などで組むのと比較して、
どのような利点があるのか教えてください。

Aベストアンサー

現在ではもはや古典的な「コンパイル言語」「インタープリタ言語」の区別は意味を持たないでしょう。
Cは確かにターゲットのCPU/OSの環境専用のマシン語にコンパイルされ、実行されますが、Javaや.NET用言語では、ソースプログラムをそれぞれの仮想マシンの仮想マシンコードにコンパイルしてオブジェクトファイルを作り、仮想マシンがそのコードをインタープリトします。

また、PerlやRuby等に置いてもソースを中間コードにコンパイルしてからその中間コードをインタープリトします。

従って、
・純粋なコンパイル言語・・・CPU/OS等環境依存のマシン語ファイルをつくり実行する
・その他のいわゆるコンパイル言語・・・あらかじめ中間コードファイルにコンパイルしておき、その中間コードをインタープリトして実行する
・いわゆるインタープリター言語・・・実行の最初に中間コードにコンパイルしそれをインタープリトして実行する

運営上の問題
・いわゆるコンパイル言語・・・ソースファイルとオブジェクトファイルの関連づけをきちんと管理する必要がある。管理しないとエラー発生時にどのソースファイルを調べればいいかわからない
・純粋なコンパイル言語・・・上記に加えて、異なる環境で動かすためには再コンパイルとテストが必要
・いわゆるインタープリタ言語・・・何度も何度も実行される場合、コンパイルの時間が実行速度に影響する(ウェブアプリでの利用では一度できた中間コードをHTTPサーバープログラム中に保持することでコンパイルの繰り返しを防ぐ工夫がされることが多い)

特定のOS環境でのみ使える機能をつかったプログラムは、どの形式であろうが、その特定の環境でしか使えません。

現在ではもはや古典的な「コンパイル言語」「インタープリタ言語」の区別は意味を持たないでしょう。
Cは確かにターゲットのCPU/OSの環境専用のマシン語にコンパイルされ、実行されますが、Javaや.NET用言語では、ソースプログラムをそれぞれの仮想マシンの仮想マシンコードにコンパイルしてオブジェクトファイルを作り、仮想マシンがそのコードをインタープリトします。

また、PerlやRuby等に置いてもソースを中間コードにコンパイルしてからその中間コードをインタープリトします。

従って、
・純粋なコ...続きを読む

QRed Hat Linux 7Jでのgccコンパイルについて

最近自作のPCに7Jをインストールしたのですが、PLANEX
のLANカード(FNW-9702T)が認識せず、手動でドライバを
導入したいのですが、ソースのvia-rhine.cがgccでうまく
コンパイルできません。

鬼の様なコンパイルエラーが出るので、ヘッダのパスが
まずいのかと思ってその辺をいじりましたがうまくいきま
せんでした。(ちなみにhello.cはOKです)

ネットをあちこち覗くと、どうもバージョン7からgccが
変わりましたみたいな記述は見つかるのですが、対処の
仕方がよくわかりません。

バージョン7でうまくコンパイルできる方法をご存知の方
教えていただけませんか?

Aベストアンサー

gcc -DMODVERSIONS -DMODULE -D__KERNEL__ -isystem /usr/src/linux/include/ -Wall -Wstrict-prototypes -O6 -c viarhine.c
でコンパイルできます。
また、出来あがったドライバを設定するときですが、マニュアルには誤記があり、アルファベットのつづりが間違えています。
マニュアルのバージョンが同じなら、付録C1.RedHatLinux61の場合の
8.******「Kernel module」の値を「viahrine」にしてください。
とありますが、「viarhine」の間違いですのでご注意ください。
社内で同僚が、私が誤記を見つけるまで3日悩んでいました。

Q激しくカテ違いかもしれませんが、コンパイル後exeがウィルス感染?

お疲れ様です。
激しくカテゴリ違いかもしれませんが、よろしくお願い致します。

環境
OS:windows vista
開発環境:visual c++ 2008 express edition
セキュリティ:SOURCE NEXT(ウィルスセキュリティーZERO)

上記でwinsock系の関数を使ったプログラムをコンパイル(Release版)しexeを作成すると「Trojan」ウィルスとして検知されてしまいます。
※同じプログラムをDebug版でコンパイルした時には起きません。

本当に「Trojan」ウィルスに感染しているものなのか?
それとも誤検知なのか?
なにかしら情報をお持ちの方、申し訳ありませんが情報がありましたら提供の程お願い申しあげます。

Aベストアンサー

自作プログラムという事であれば誤検知ということで良いと思います
ZEROではありませんが昔同様な事例を経験したことはあります

ただ一応他のスキャンプログラムでも確認した方が良いでしょう
(ZEROは余り評判よくないので乗り換えた方が良いかも)

QRed Hat Linux7.1J によるメールサーバの構築について.

こんにちは.初めて書込みします.現在,Red Hat Linux 7.1 Jをインストールしてメイルサーバの構築をしております.しかし,以下のような問題が勃発して非常に困っています.
(1) ホストからクライアント(WindowsNT)へ送信できるが,
クライアントからPOPでメイルを受信することができない.
(2) クライアントからのftp,telnetができない.

現在の設定は,ファイアウォールはipchainsですべてACCEPTに設定しており,
sendmail,qpoperの設定もしています.さまざまなサイトで似た状況を見受け,
参考にしているのですがどうもうまくいきません.

こんな知識の浅はかな私に御教示,御鞭撻のほど宜しく御願い致します.

では.

Aベストアンサー

xinetdの設定は確認しましたか?
/etc/xinetd.d/*にftp,telnet,qpopperの設定
ファイルがありますか?

さらに TCP Wrapperの設定は大丈夫ですか?

Qgcc バージョン違いによるコンパイルエラー

C言語でWeb系のプログラムを作成している者です。
以前まで、OSはFreeBSD 4.11-RELEASE-p12・gccのバージョンは2.95.4でコンパイルできていたプログラムが、OSはFreeBSD 5.4-RELEASE-p8・gccのバージョンは・gccのバージョンは 3.4.2で、今まで出なかったようなエラーが沢山出現し、コンパイルできなくなってしまいました。

OSをインストールし直すのは、既に稼働中のサイトですので厳しく、GCCのバージョンを下げるかソースを書き換えるかして対処する方向で行きたいと考えております。
しかし、gccの2.95.4の圧縮ファイルはもう、gccの公式サイトに落ちておらず、バージョンダウンは難しそうです。

gccのバージョンによるコンパイルエラーを乗り越えた方、ご指摘など有りましたらお教えくださると幸いです。

Aベストアンサー

> ソースコードの添付は、会社のものですのでちょっと厳しいので、部分的に…

全文は必要ないのです。エラーが発生した部分を、エラーが再現可能な形で提示してもらえれば、おそらく問題点を指摘できます。

> int a = 0;
> char b[2] = "";
> char *c[256] = {0};
> こういった、宣言の指定部分で特にエラーが出ているようですので、こちらの表記が問題なのでしょうか。

上記の表記自体は問題ありません。ただ、同じ変数に対する初期化が複数回行われていると、

error: redefinition of parameter '○○'
error: previous definition of '○○' was here

ということになります。
具体的には、

int a = 1;
/* 別の宣言並び */
int a = 1;

のように、同じ変数を二回初期化した場合です。

QRed Hat 7.1 に rshできない(~/.rhostsの設定後)

Red Hat Linux release 7.1 です。
~/.rhosts を設定しても 他及び自ホストから rshできません。
ホストとユーザを記述し,モードを 600 にしました。

どうすれば,rshを許可できるでしょうか?

Aベストアンサー

myhost: Connection refused
で拒否されるのであれば、
inetd/xinetdからin.rlogindの起動が
許可されていません。
inetd(スーパーサーバ)の関連を、調べなおして
見ましょう。
TCP Wrapperで拒否されたのであれば
Connection reset by peer.
と表示されます。

プロンプトから
ps -ax|grep inetd|grep -v grep
と入力し、inetdとでたら、/etc/inetd.conf
のloginで始まる行のコメントを解除しましょう。
ファイルを、

xinetdと表示されたら/etc/xinetd.d/rlogin
を修正しましょう。
disable = yes
となっているはずです。これをnoに変えましょう。

単にリモート操作をしたいのであればrloginやtelnet
の方が適していると思います。rshは遠隔でコマンドを
実行するのが目的でリモートログインするのは
おまけ的な要素でしかありません。
なぜrshなのでしょうか?
何もrshでなくてtelnet/rloginでは何がだめなのでしょうか?


注意:
ここでは「単に動くだけ」の設定方法しか紹介して
おりません。そのためこのままではセキュリティ的に
非常に弱いので、このままインターネットに直結/常設
することは避けてください。

myhost: Connection refused
で拒否されるのであれば、
inetd/xinetdからin.rlogindの起動が
許可されていません。
inetd(スーパーサーバ)の関連を、調べなおして
見ましょう。
TCP Wrapperで拒否されたのであれば
Connection reset by peer.
と表示されます。

プロンプトから
ps -ax|grep inetd|grep -v grep
と入力し、inetdとでたら、/etc/inetd.conf
のloginで始まる行のコメントを解除しましょう。
ファイルを、

xinetdと表示されたら/etc/xinetd.d/rlogin
を修正しましょう。
...続きを読む


人気Q&Aランキング

おすすめ情報