情報工学科 3年生対象 専門科目 システムプログラミング 第3回 makeコマンド 動的リンクライブラリ 情報工学科 篠埜 功.

Slides:



Advertisements
Similar presentations
システムプログラミング 情報工学科 篠埜 功 情報工学科 3 年生対象 専門科目 第5回 シェルスクリプトの続 き レポート課題 main 関数の引数 usage メッセージ.
Advertisements

システムプログラミング 第10回 情報工学科 篠埜 功. 今回の内容 プロセス(続き) – execve システムコール 現在のプロセスを、引数に与えられたファイル(実行 形式ファイルあるいはシェルスクリプト等の実行可能 なファイル)を受け取り、現在のプログラムをそれで 置き換える(変身)。 fork.
初年次セミナー 第13回 2次元グラフィックス(1).
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第5回 関数(1) 情報・知能工学系 山本一公
初年次セミナー 第8回 データの入力.
Generic programming と STL
UNIX利用法.
UNIX利用法 情報ネットワーク特論資料.
知能機械工学科 担当:長谷川晶一 TA:新・後藤・ナンバ
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
ヒープソートの演習 第13回.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第4回 配列(2) 情報・知能工学系 山本一公
プログラミング基礎I(再) 山元進.
第3回 ファイルとフォルダ 伊藤 高廣 計算機リテラシーM 第3回 ファイルとフォルダ 伊藤 高廣
初年次セミナー 第4回 整数と実数の取り扱い.
システムプログラミング 第6回、7回 main関数の引数 usageメッセージ システムコールのエラーメッセージ ファイル
ファーストイヤー・セミナーⅡ 第8回 データの入力.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
プログラミング入門2 第1回 導入 情報工学科 篠埜 功.
第2回ネットワークプログラミング 中村 修.
プログラミング演習(2組) 第12回
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
情報処理Ⅱ 2005年12月9日(金).
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
プログラミング実習 1・2 クラス 第 1 週目 担当教員:  渡邊 直樹.
湘南工科大学 2013年4月23日 プロジェクト実習A アドベンチャーゲームを作ろう 第3回 湘南工科大学情報工学科 准教授 小林 学.
担当:青木義満、篠埜 功 情報工学科 3年生対象 専門科目 システムプログラミング 第8回、第9回 シグナル処理 担当:青木義満、篠埜 功
情報工学科 3年生対象 専門科目 システムプログラミング 第1回 導入 第2回 Linux、分割コンパイル 情報工学科 篠埜 功.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
初年次セミナー 第2回 文字の出力.
情報工学科 3年生対象 専門科目 システムプログラミング 第1回 導入 第2回 Linux、分割コンパイル 情報工学科 篠埜 功.
情報工学科 3年生対象 専門科目 システムプログラミング 第5回、第6回 ヒアドキュメント レポート課題 情報工学科 篠埜 功.
情報処理概論Ⅰ 2007 第4回 2018/11/30 情報処理概論Ⅰ 第4回.
システムプログラミング 第9回 、10回 ハードリンク、シンボリックリンク プロセスの生成
第10回関数 Ⅱ (ローカル変数とスコープ).
システムプログラミング 第3回、第4回、第5回、第6回 情報工学科 篠埜 功 makeコマンド 動的リンクライブラリ シェルスクリプト
実行時情報に基づく OSカーネルのコンフィグ最小化
プログラミング入門2 第11回 情報工学科 篠埜 功.
講義では、Cプログラミングの基本を学び 演習では、やや実践的なプログラミングを通して学ぶ
第9回関数Ⅰ (簡単な関数の定義と利用) 戻り値.
3-3.テーブルを更新する 2004年 4月22日(木) 01T6074X 茂木啓悟.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
プログラミング入門2 第13回、14回 総合演習 情報工学科 篠埜 功.
情報工学科 3年生対象 専門科目 システムプログラミング 第4回 シェルスクリプト 情報工学科 篠埜 功.
システムプログラミング 第7回、8回 ファイルシステム関連の システムコール
情報とコンピュータ 静岡大学工学部 安藤和敏
プログラミング入門2 第9回 ポインタ 情報工学科 篠埜 功.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
プログラミング入門2 第13回、14回 総合演習 情報工学科 篠埜 功.
システムプログラミング 第6回 システムコールのエラーメッセージ ファイルシステム 情報工学科 篠埜 功.
ネットワーク・プログラミング Cプログラミングの基礎.
システムプログラミング 第10回 プロセス間通信3 簡易Web server(準備) Chat プログラム 担当:青木義満、篠埜 功
第5回 プログラミングⅡ 第5回
プログラミング入門2 第5回 配列 for文 変数宣言 初期化
ネットワーク・プログラミング Linuxシステムとソフトウェア開発.
Make の使い方.
情報工学科 3年生対象 専門科目 システムプログラミング 第3回 makeコマンド 動的リンクライブラリ 情報工学科 篠埜 功.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
プログラミング演習II 2003年11月19日(第6回) 木村巌.
プログラミング入門2 第5回 配列 変数宣言、初期化について
情報処理Ⅱ 小テスト 2005年2月1日(火).
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
ファーストイヤー・セミナーⅡ 第10回 if文による選択処理(2).
Presentation transcript:

情報工学科 3年生対象 専門科目 システムプログラミング 第3回 makeコマンド 動的リンクライブラリ 情報工学科 篠埜 功

開発支援ツール make コンパイルを要するソースファイルの数が多くなった場合,手間がかかる 1つのヘッダファイルを複数のソースファイルで使用している場合,ヘッダファイルの修正→ 関連する全てのソースファイルの際コンパイル makeを使用 ファイルの変更をした場合、その影響を受けるファイルを再コンパイルする。(不要な再コンパイルをしない) ファイルの日付情報を用いる。

Makefile (例) ファイルの作成方法を記述したルール main : main.o add.o mult.o コロンの右にコロンの左のファイルを作るために必要なファイルをスペースで区切って並べる 次の行以下にそのファイルを作るためのコマンドをTABキーを押したあとに記述。2つ以上のコマンドを書いてもよい。 (例) main : main.o add.o mult.o gcc -o main main.o add.o mult.o main.o : main.c addmult.h gcc -c main.c add.o : add.c gcc -c add.c mult.o : mult.c gcc -c mult.c TAB

make さきほどの例を内容とするMakefileというファイルを作成し、 main : main.o add.o mult.o gcc -o main main.o add.o mult.o main.o : main.c addmult.h gcc -c main.c add.o : add.c gcc -c add.c mult.o : mult.c gcc -c mult.c

make さきほどの例で、add.cやaddmult.hなど、ソースファイルの内容を変更し(スペースやコメントを入れるなど)、 $ make を実行して何が起きるか確認せよ。 (参考) touchコマンドを使うと、中身を変えずにファイルの時刻情報のみ更新できる。 $ touch add.c など。

make main : main.o add.o mult.o gcc -o main main.o add.o mult.o $ make add.o などと、コロンの左側のものをmakeの引数に与えると、それを作成しようとする。 main : main.o add.o mult.o gcc -o main main.o add.o mult.o main.o : main.c addmult.h gcc -c main.c add.o : add.c gcc -c add.c mult.o : mult.c gcc -c mult.c

Makefile test1: ls –l test2: ps –ef | grep sasano $ make test1 コロンの左に書くのはファイル名でなくてもよい。 test1: ls –l test2: ps –ef | grep sasano $ make test1 とするとファイル一覧が表示され、 $ make test2 とするとプロセス一覧からsasanoを含む行を抜き出したものが表示される。 (注意) もし、test1, test2という名前のファイルがそのディレクトリに存在している場合は、別の名前にしてください。

make main : main.o add.o mult.o gcc -o main main.o add.o mult.o clean というターゲットを作っておき、実行コマンドとして不要なファイルを削除するコマンドを書いておくということがよく行われる。 $ make clean とすると、ソースファイルではないファイルが削除されてディレクトリがきれいになる。 main : main.o add.o mult.o gcc -o main main.o add.o mult.o main.o : main.c addmult.h gcc -c main.c add.o : add.c gcc -c add.c mult.o : mult.c gcc -c mult.c clean : rm –f main main.o add.o mult.o rm に-fオプションは強制削除のオプションであり、存在しないファイルが引数にあたえられてもメッセージが出ない。

Makefileの名前について Makefileの名前は”Makefile”でなくてよい。 makeコマンド(GNU make)はdefaultでは”GNUmakefile”, “makefile”, “Makefile”をこの順で探し、最初に見つかったもので実行する。これ以外のものを使いたい場合は-fオプションで指定する。たとえばmyMakefileという名前でMakefileを作成したときは、 $ make –f myMakefile のように実行すればよい。

練習問題 前回のlibaddmult.aを作ってからmainを作成する手順をmakeコマンドで行えるようにMakefileを作成せよ。

マニュアル表示コマンド man (例) gcc, ar, makeコマンドについて調べたい $ man gcc $ man ar $ man make コマンドの処理内容,様々なオプションの解説が書かれている。 manコマンドについては $ man man で調べる。

共有ライブラリ(shared library) 動的リンクライブラリ(dynamic link library)とも言う。 実行形式ファイルにはライブラリの中身は含まれず、実行時にリンクされる。 実行形式ファイルのサイズの削減 ライブラリを修正する場合、ライブラリファイルのみ修正すればよく、リンク作業が不要。

共有ライブラリ作成例 さきほどのadd, mult関数の例で共有ライブラリを作成する。 $ gcc –fPIC –shared –o libaddmult.so add.c mult.c これでadd, mult関数が共有ライブラリとしてlibaddmult.soに作成される。 $ gcc –L. –o main main.c –laddmult (あるいは $ gcc –o main main.c libaddmult.so と明示的に指定) これでlibaddmult.soが実行時にリンクされるようになる。  $ ./main を実行する前に、 $ setenv LD_LIBRARY_PATH . を実行しておく(シェルがtcshの場合)。シェルがbashの場合は、 $ LD_LIBRARY_PATH=.; export LD_LIBRARY_PATH とする。add.cを変更してlibaddmult.soを作り直し、mainを実行すると、mainを作成しなおさなくても変更が反映されていることが分かる。  $ ldd main (lddはlist dynamic depencenciesの略) で、mainが動的にリンクするファイル一覧が表示される。

補足 -lxxx でリンクする際には、libxxx.soが先に検索される。 (例)/usr/lib/libm.so, /usr/lib/libm.aのように両方ある場合は/usr/lib/libm.soが(defaultで)使われる。

レポート課題1 配列を関数に渡すとき、長さをもう一つの引数として渡す。 長さnのint型の配列の各要素に1から100までの整数をランダムに作成して代入する関数randAssignを定義したファイルrandAssign.c 長さnのint型の配列を受け取り、要素を小さい順に並べ替える関数sortを定義したファイルsort.c randAssign関数のプロトタイプ宣言を記述したファイルrandAssign.h sort関数のプロトタイプ宣言を記述したファイルsort.h 以下の内容のmain関数を記述したmain.c 長さnの配列を作成し、それをrandAssign関数に渡して整数をランダムに格納させ、sort関数に渡してソートをさせ、その結果を画面に出力するプログラム。長さnの値はmain.cに直接書いてよい。キーボードから入力するようにしてもよい。 main関数の先頭部分でrandAssign.h, sort.hを読み込む。 Makefile 実行形式ファイル(mainとする)をmakeコマンドで作成できるように作成する。 配列を関数に渡すとき、長さをもう一つの引数として渡す。

レポートの提出方法 □ 下記のファイルを作成し、提出 randAssign.c, randAssign.h, sort.c, sort.h, main.c, Makefile, kadai1.txt □ 提出方法 システムプログラミング講義用の課題提出用フォルダ内にあるkadai1というフォルダの中に自分の学籍番号を名前とするフォルダを作成し、その中に上記ファイルを置く。kadai1.txt内に学籍番号、氏名、日付、および作成したプログラムの簡単な説明を記載する。 □ 提出期限   11月1日 23:59 まで。締め切り後に提出した場合、成績への反映を保証しない。 □ アーカイブを作る必要はありません(作ってもいいですが)。 □ 動的リンクにするか静的リンクにするかについても自由。