UNIX の C言語:gccのstaticオプション
技術ドキュメント目次 -> UNIX の C言語 -> gccのstaticオプション本技術ドキュメントは、2002~2004年頃に作成したものが多いです。
内容が古くなっていることもあるかと思いますが、ご了承ください。
【低価格SSL証明書】弊社運営の低価格SSL証明書販売サイト、翌月末払いなど請求書払いも可能。
◆ 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