技術ドキュメント
技術ドキュメント目次 -> UNIX の C言語 -> gccのstaticオプション本技術ドキュメントは、ここしばらくメンテナンスをしておりません。
内容が古くなっている可能性などございますこと、ご理解を頂けますようお願いいたします。
[オススメ] 国内最安のSSL証明書(RapidSSL 2880円、ジオトラスト 10500円、ベリサイン 39900円)
[オススメ] SSL証明書のアフィリエイトプログラム(最大11700円/1件の報酬を獲得いただけます)
◆ gccのstaticオプション(スタティックリンクでコンパイル)
Unix の C言語で開発したプログラムをいくつかの環境で稼動させる際、環境によってライブラリのインストール状況が異なっていると、
それぞれの環境ごとでの動作確認が必要になったりで、
少々悩ましい場合があるかもしれません。
(あまり、そのようなことは実際には少ないかと思いますが。)
そのようなとき、
gcc に -static オプションを付加してコンパイルを行うと、
実行バイナリにライブラリが組み込まれ手コンパイルされるので、
上記のような場合の解決になるかもしれません。
(「スタティックリンクでコンパイルする」とか言ったりします。)
例えば、下記のようにして test という実行ファイルを作成してみて、
ldd コマンドの出力結果を比較してみてください。
test.c をダイナミックリンクでコンパイルする例
|
$ gcc -Wall -o test test.c $ ldd test |
test.c をスタティックリンクでコンパイルする例
|
$ gcc -Wall -static -o test test.c $ ldd test |
なお、スタティックにコンパイルする際は、
ライブラリのディレクトリ(/lib とか /usr/lib とか)に、
lib***.a という拡張子が .a のファイルが存在している必要があります。
ライブラリをインストールすると、
lib***.a と lib***.so といったように、.so のファイルと .a のファイル
の両方がインストールされることがよくありますが、
.a のファイルはスタティックリンクするために使用され、
.so のファイルはダイナミックリンクするために使用されます。
また、通常 *.so は、ファイル名にバージョンが含まれたファイルへの
シンボリックリンクになっていることが多いです。
■ UNIX の C言語 についての他のドキュメント
- iconv()で文字コード変換
- getloadavg()でロードアベレージの取得
- getpass()でパスワード入力時の制御
- forkとexec
- gccのstaticオプション
■ 他のグループのドキュメント
Apache / Linux / FreeBSD / OpenSSL / Perl / HTTPプロトコル / Jakarta Tomcat / Java / NetBSD / Oracle / PostgreSQL / UNIX の C言語 / UNIX のコマンド / Windows / bind / システム運用TIPS
