国際化対応言語環境の利用ガイド

動的にリンクされたアプリケーション

Solaris 8 では、アプリケーションを libc などのシステムライブラリにリンクする方法として、動的リンクと静的リンクを選択できます。しかし、システムライブラリの国際化機能を必要とするアプリケーションは動的にリンクしなければなりません。このようなアプリケーションが静的にリンクされている場合、setlocale 関数を使用してロケールを C または POSIX 以外に設定する操作は失敗します。静的にリンクされたアプリケーションは、C および POSIX ロケールでのみ動作します。

デフォルトでは、リンカープログラムはアプリケーションを動的にリンクしようとします。リンカーやコンパイラのコマンド行のオプションとして、-Bstatic-dn を指定すると、アプリケーションは静的にリンクされる場合があります。既存のアプリケーションが動的にリンクされているかどうかを調べるには、/usr/bin/ldd コマンドを使用します。

たとえば、次のように入力します。


% /usr/bin/ldd /sbin/sh

このコマンドは以下のメッセージを表示します。


% ldd: /sbin/sh: file is not a dynamic executable or shared object

このメッセージは、/sbin/sh コマンドが動的にリンクされたプログラムではないことを示します。また、次のように入力します。


% /usr/bin/ldd /usr/bin/ls

このコマンドは以下のメッセージを表示します。


% libc.so.1 => 	/usr/lib/libc.so.1
% libdl.so.1 => /usr/lib/libdl.so.1

このメッセージは、/usr/bin/ls コマンドは 2 つのライブラリ libc.solibdl.so.l に動的にリンクされていることを示します。

つまり、ldd コマンドからアプリケーションに対するメッセージに libc.so.l が含まれていない場合は、アプリケーションが libc に静的にリンクされていることを示します。この場合、リンカーのコマンド行オプションを動的リンクが使用されるように変更し、アプリケーションを再リンクします。