アプリケーションを libc などのシステムライブラリにリンクする方法として、動的リンクと静的リンクを選択できます。システムライブラリの国際化機能を必要とするアプリケーションは動的にリンクしなければなりません。このようなアプリケーションが静的にリンクされている場合は、setlocale 関数を使用してロケールを C または POSIX 以外のものに設定する操作は失敗します。静的にリンクされたアプリケーションは、C および POSIX ロケールでのみ動作します。
デフォルトでは、リンカープログラムはアプリケーションを動的にリンクしようとします。リンカーやコンパイラのコマンド行のオプションとして、-Bstatic や -dn を指定すると、アプリケーションは静的にリンクされる場合があります。既存のアプリケーションが動的にリンクされているかどうかを調べるには、/usr/bin/ldd コマンドを使用します。
たとえば、次のコマンドに対する応答によって、/sbin/sh コマンドが動的にリンクされたプログラムではないことがわかります。
% /usr/bin/ldd /sbin/sh ldd: /sbin/sh: file is not a dynamic executable or shared object |
次のコマンドに対する応答は、/usr/bin/ls コマンドは 2 つのライブラリ libc.so と libdl.so.l に動的にリンクされていることを示します。
% /usr/bin/ldd /usr/bin/ls libc.so.1 => /usr/lib/libc.so.1 libdl.so.1 => /usr/lib/libdl.so.1 |