授業/C言語基礎/コンパイルとリンク
をテンプレートにして作成
開始行:
*コンパイル [#h2c785d0]
ある言語で書かれたものを別の言語で書かれたものに変換(翻...
この授業では、C言語で書かれたプログラムをコンピューターが...
**コンパイラー [#rba646af]
コンパイルするソフトウェアのことを''コンパイラー''といい...
この授業では、''gcc''というコンパイラーを使用しています。
gccを用いてCプログラムのファイル名だけを指定してコンパイ...
#geshi(sh){{
luna% gcc hello.c
}}
**実行形式のファイル名を指定する [#qbe406af]
gccに ''-o'' オプションを指定すると、出力される実行形式の...
#geshi(sh){{
luna% gcc -o hello hello.c
}}
**演習1 [#sd56e6f9]
画面にHello World!と出力するプログラムhello.cを作成し、実...
*他のファイルに定義された関数を使う(外部結合) [#ic383494]
これまでは、すべてのプログラムが一つのファイルに記述され...
大規模なソフトウェアになると、機能などのまとまりごとにモ...
すると、他のファイルに定義されている関数を呼び出すことが...
このようなとき、記憶域指定子として ''extern'' をつけてプ...
#geshi(c){{
extern 戻り値の型 関数名(引数1の型 引数1の名前, 引数2の型...
}}
例えば、次のようなプログラムがファイル add.c に定義されて...
#geshi(c){{
/*
* add.c
*/
double add(double x, double y) {
return x + y;
}
}}
これを、main.c というファイルのmain関数から呼び出すときに...
#geshi(c){{
/*
* main.c
*/
#include <stdio.h>
extern double add(double x, double y);
int main(void) {
double x = 1.0, y = 2.0;
double z = add(x, y);
printf("%f\n", z);
return 0;
}
}}
複数のファイルに分けて記述されたプログラムをコンパイルす...
#geshi(sh){{
luna% gcc add.c main.c
}}
これらのプログラムは、単体では実行可能なファイルにコンパ...
#geshi(sh){{
luna% gcc add.c
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/...
(.text+0x20): undefined reference to `main'
collect2: ld はステータス 1 で終了しました
luna% gcc main.c
/tmp/ccUSNIu9.o: In function `main':
main.c:(.text+0x3f): undefined reference to `add'
collect2: ld はステータス 1 で終了しました
}}
**演習2 [#o7ee209c]
プログラム1a, 1bを作成し、実行結果を確認せよ。
*オブジェクト・ファイル [#xbba462f]
大規模なプログラムになると、コンパイルにかなりの時間がか...
一部だけに誤りがあったり、一部だけを変更したときに、すべ...
そこで、ファイルごとにCプログラムを中間ファイルにコンパイ...
この中間ファイルのことを''オブジェクト・ファイル''といい...
Cプログラムをオジェクト・ファイルにコンパイルするには、gc...
#geshi(sh){{
luna% gcc -c add.c
luna% gcc -c main.c
}}
オブジェクト・ファイルの名前は、Cプログラム(ソース・ファ...
**演習3 [#xac1421a]
プログラム1a, 1bについて、それぞれオブジェクト・ファイル...
*リンク [#o84f9750]
ファイルごとにオブジェクト・ファイル作成し、必要なオブジ...
これを''リンク''といいます。
オブジェクト・ファイルをリンクして実行可能なファイルを作...
#geshi(sh){{
luna% gcc add.o main.o
}}
**演習4 [#y85f1933]
演習3で作成したオブジェクト・ファイルをリンクし、実行可能...
*まとめ [#d7dee275]
ある言語で書かれたものを別の言語で書かれたものに変換する...
プログラムが複数のファイルで構成されているとき、Cプログラ...
他のファイルで定義されている関数を使用するときは、''exter...
終了行:
*コンパイル [#h2c785d0]
ある言語で書かれたものを別の言語で書かれたものに変換(翻...
この授業では、C言語で書かれたプログラムをコンピューターが...
**コンパイラー [#rba646af]
コンパイルするソフトウェアのことを''コンパイラー''といい...
この授業では、''gcc''というコンパイラーを使用しています。
gccを用いてCプログラムのファイル名だけを指定してコンパイ...
#geshi(sh){{
luna% gcc hello.c
}}
**実行形式のファイル名を指定する [#qbe406af]
gccに ''-o'' オプションを指定すると、出力される実行形式の...
#geshi(sh){{
luna% gcc -o hello hello.c
}}
**演習1 [#sd56e6f9]
画面にHello World!と出力するプログラムhello.cを作成し、実...
*他のファイルに定義された関数を使う(外部結合) [#ic383494]
これまでは、すべてのプログラムが一つのファイルに記述され...
大規模なソフトウェアになると、機能などのまとまりごとにモ...
すると、他のファイルに定義されている関数を呼び出すことが...
このようなとき、記憶域指定子として ''extern'' をつけてプ...
#geshi(c){{
extern 戻り値の型 関数名(引数1の型 引数1の名前, 引数2の型...
}}
例えば、次のようなプログラムがファイル add.c に定義されて...
#geshi(c){{
/*
* add.c
*/
double add(double x, double y) {
return x + y;
}
}}
これを、main.c というファイルのmain関数から呼び出すときに...
#geshi(c){{
/*
* main.c
*/
#include <stdio.h>
extern double add(double x, double y);
int main(void) {
double x = 1.0, y = 2.0;
double z = add(x, y);
printf("%f\n", z);
return 0;
}
}}
複数のファイルに分けて記述されたプログラムをコンパイルす...
#geshi(sh){{
luna% gcc add.c main.c
}}
これらのプログラムは、単体では実行可能なファイルにコンパ...
#geshi(sh){{
luna% gcc add.c
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/...
(.text+0x20): undefined reference to `main'
collect2: ld はステータス 1 で終了しました
luna% gcc main.c
/tmp/ccUSNIu9.o: In function `main':
main.c:(.text+0x3f): undefined reference to `add'
collect2: ld はステータス 1 で終了しました
}}
**演習2 [#o7ee209c]
プログラム1a, 1bを作成し、実行結果を確認せよ。
*オブジェクト・ファイル [#xbba462f]
大規模なプログラムになると、コンパイルにかなりの時間がか...
一部だけに誤りがあったり、一部だけを変更したときに、すべ...
そこで、ファイルごとにCプログラムを中間ファイルにコンパイ...
この中間ファイルのことを''オブジェクト・ファイル''といい...
Cプログラムをオジェクト・ファイルにコンパイルするには、gc...
#geshi(sh){{
luna% gcc -c add.c
luna% gcc -c main.c
}}
オブジェクト・ファイルの名前は、Cプログラム(ソース・ファ...
**演習3 [#xac1421a]
プログラム1a, 1bについて、それぞれオブジェクト・ファイル...
*リンク [#o84f9750]
ファイルごとにオブジェクト・ファイル作成し、必要なオブジ...
これを''リンク''といいます。
オブジェクト・ファイルをリンクして実行可能なファイルを作...
#geshi(sh){{
luna% gcc add.o main.o
}}
**演習4 [#y85f1933]
演習3で作成したオブジェクト・ファイルをリンクし、実行可能...
*まとめ [#d7dee275]
ある言語で書かれたものを別の言語で書かれたものに変換する...
プログラムが複数のファイルで構成されているとき、Cプログラ...
他のファイルで定義されている関数を使用するときは、''exter...
ページ名: