- ベストアンサー
プログラム作成でのコマンドについての質問
- プログラム作成においてコンパイルやリンクなどのコマンドについて知りたいです。
- コンパイルオプションやコマンドに関する情報をまとめた書籍やウェブサイトを探しています。
- 具体的なコマンドについても説明してほしいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
まず、実行ファイルを作成するには、最初にソースコードをコンパイルしてオブジェクトコードというものを作成し、複数のオブジェクトコードをリンクという処理を行います。 1. コンパイルについて 基本的には以下のコマンドでコンパイルできます。 $ gcc -c example.c 内部的には cpp によってプリコンパイル (構文解析) され、cc1 によってコンパイルされ、as によってオブジェクトコードになります。 ただし、共有ライブラリ (拡張子が .so のファイル) を作成する場合は、-fPIC オプションが必要になります。 $ gcc -fPIC -c example.c 2. リンクについて (1) 実行形式ファイルの作成 $ gcc -o example example1.o ... examplen.o シンボルテーブルを削除する場合はさらに、 $ strip example とします。(strip するとファイルサイズを小さくすることができますが、デバッグができなくなってしまうので、基本的にライブラリは strip しません) (2) 静的ライブラリの作成 $ ar cr libexample.a example1.o ... examplen.o $ ranlib libexample.a ※ ar コマンドは tar のようなものと考えてもらえればと思います。 (3) 共有ライブラリの作成 $ gcc -shared -o libexample.so example1.o ... examplen.o (4) 静的ライブラリや共有ライブラリの利用について libexample1.so または libexample1.a libexample2.so または libexample2.a を利用する場合、 $ gcc -o example example.c -L/usr/local/lib -lexample1 -lexample2 -L オプションはライブラリが存在するディレクトリを指定します。ただし、/lib または /usr/lib にライブラリが存在する場合は -L オプションを指定する必要はありません。 また、特に何もオプションを指定しない場合で、静的ライブラリと共有ライブラリの両方が存在する場合は、共有ライブラリとリンクが行われます。 あとは、いろんなプログラムを make しまくって勉強して下さい。あまりこの分野の書籍がないのが実情です。
その他の回答 (1)
- PrintScree
- ベストアンサー率25% (538/2091)
まずはLinuxの勉強からした方が良さそうに見えますが… gccというCコンパイラを使用しているのでgccの書籍を探してください。 もしくは、manコマンドを活用すればヘルプを見ることも出来ますよ。 ただし、英語で出てくることも多いと思うのである程度英語の読解力が必要です。 linuxの書籍は、どのディストリビューションのものでも基本は同じですので、何冊か書籍を購入して勉強してみてください。