プログラム素人です。
コンパイルオプション、あるいはコマンドなどいろいろとあり判らずにいます。
例えば、
$ 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
など(ほんの一部だと思いますが)これらのコマンドの意味役割など知りたいのですが、書籍などありますでしょうか。
ネット上で検索してみましたがキーワードが悪いのかよいサイトに出会えません。
皆様、よいアドレス、書籍あればご紹介下さい。
No.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 しまくって勉強して下さい。あまりこの分野の書籍がないのが実情です。
No.1
- 回答日時:
まずはLinuxの勉強からした方が良さそうに見えますが…
gccというCコンパイラを使用しているのでgccの書籍を探してください。
もしくは、manコマンドを活用すればヘルプを見ることも出来ますよ。
ただし、英語で出てくることも多いと思うのである程度英語の読解力が必要です。
linuxの書籍は、どのディストリビューションのものでも基本は同じですので、何冊か書籍を購入して勉強してみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ShellExecute関数について(初...
-
スタティックリンクライブラリ...
-
VC++6.0からVC++.NET2005へ移植
-
visual studio community2017 O...
-
fatal error LNK1104: ファイル...
-
「MFCを使用しない」から「MFC...
-
cygwinでOpenGLのコンパイルが...
-
Netbeansの使い方
-
msimg32.libファイルをリンカに...
-
【VS2008 C++】2つのプロジェ...
-
静的/動的リンクライブラリにつ...
-
スタティックライブラリ関係の...
-
python エラー
-
<unistd.h>をVisualStudioでつ...
-
エクセルのエラーメッセージ「4...
-
アプリケーションのDLLファイル...
-
Excelのエラーで困ってます。
-
Makefile作成時の拡張子.oとは?
-
エクセルVBAではRound...
-
VC++6の「プロセスへアタッチ」...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スタティックライブラリ関係の...
-
'stdafx.h'のエラーに関して
-
#pragma commentの相対パス指定
-
スタティックリンクライブラリ...
-
fatal error LNK1104: ファイル...
-
visual studio community2017 O...
-
静的/動的リンクライブラリにつ...
-
【VS2008 C++】2つのプロジェ...
-
DirextXエラー:ファイル'dxerr9...
-
C++Builder リンカエラーとは?
-
タイプライブラリのレジストリ...
-
「MFCを使用しない」から「MFC...
-
C言語のPathFileExistsについて
-
VS2010にて、依存関係とビルド順
-
VC++でビルド時の、リンク警告 ...
-
exeファイルはどのdllを参照す...
-
lvwReport/エラー/プロジェクト...
-
VC++6.0からVC++.NET2005へ移植
-
MinGWでOpenMPを使いたいのです...
-
gccでの共有ライブラリのver指定
おすすめ情報