電子書籍の厳選無料作品が豊富!

プログラム素人です。
コンパイルオプション、あるいはコマンドなどいろいろとあり判らずにいます。
例えば、

$ gcc -fPIC -c xxx.c
$ gcc -shared -Wl,-soname,libxxx.so.1 -o libxxx.so.1.0 xxx.o
# cp libxxx.so.1.0 /usr/lib
# /sbin/ldconfig /usr/lib
# ln -s /usr/lib/libxxx.so.1 /usr/lib/libxxx.so
とか
$ ar rv libxxx.a xxx.o
$ ranlib libxxx.a
$ strip libxxx.a
など(ほんの一部だと思いますが)これらのコマンドの意味役割など知りたいのですが、書籍などありますでしょうか。
ネット上で検索してみましたがキーワードが悪いのかよいサイトに出会えません。

皆様、よいアドレス、書籍あればご紹介下さい。

A 回答 (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 しまくって勉強して下さい。あまりこの分野の書籍がないのが実情です。
    • good
    • 0

まずはLinuxの勉強からした方が良さそうに見えますが…



gccというCコンパイラを使用しているのでgccの書籍を探してください。
もしくは、manコマンドを活用すればヘルプを見ることも出来ますよ。
ただし、英語で出てくることも多いと思うのである程度英語の読解力が必要です。

linuxの書籍は、どのディストリビューションのものでも基本は同じですので、何冊か書籍を購入して勉強してみてください。
    • good
    • 0

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