▽1
●
JULY ベストアンサー |
linuxのenvやexportで設定できるpathと、lnで作るリンクの違いはなんでしょうか?
方や環境変数、方やファイルシステム上の話で、全く別です。
で、具体的な問題は、実行したプログラムが共有ライブラリ(Windows でいうところの DLL)を見つけられない、という話で、その解決方法として、ファイルシステム上でリンクを作るか、LD_LIBRARY_PATH という環境変数で、ファイルの置いていあるディレクトリを指定するか、の2つがあるよ、という事を言っています。
UNIX 系 OS では、実行したプログラムが必要とする共有ライブラリを探す時に、通常は /usr/lib の下などを探しますが、LD_LIBRARY_PATH で探すディレクトリを追加する事ができます。「2. Set LD_LIBRARY_PATH to point to cvc3/lib: 」がこの話です。
リンクを作る方ですが、ファイルの実体は同じものを、全く別のファイル名でアクセスできるようにするものです。UNIX 系 OS では「ハードリンク」と「シンボリックリンク」という2種類のリンク方法があり、シンボリックリンクは、Windows のショートカットファイルに似ています。
ハードリンクに比べて、ショートカットリンクの方が作成に制限が少ないですが、Windows のショートカットファイルと同様、実体のファイルが無くなると、作成したリンクからはアクセス出来なくなる、という事が発生します(ハードリンクの場合は、作成したリンクと元のファイルが対等な関係になるので、そういった事は起きません)。
「1. Make a link to cvc3/lib/libcvc3.so 」は、libcvc3.so というファイルに対するリンクを、デフォルトで共有ライブラリを探す /usr/lib の下に作成することで、見つけられるようになる、という話になります。
1.リンクを作成する
リンクを作成するとは具体的にはどういった意味を持ち、どういった作業をするのか
リンクの作成は「ln」コマンドを使います。シンボリックリンクの方が分かりやすいので、シンボリックリンクファイルを作る方で例を示すと、以下のようになります。
ln -s /usr/local/cvc3/lib/libcvc3.so /usr/lib/
シンボリックリンクを作る場合は「-s」オプションを付けます。上記の例で /usr/lib の下に libcvc3.so というシンボリックリンクが作られ、/usr/lib/libcvc3.so という名前でアクセスできるようになり、実体のファイルは /usr/local/cvc3/lib/libcvc3.so というファイル、という事になります。今、仮にlibcvc3.so が /usr/local/cvc3/lib というディレクトリにあるとして例示しましたが、そこは実際に libcvc3.so ファイルがあるパスを指定して下さい。
ただ、/usr/lib の下にシンボリックリンクを作る、ということは、root 権限を持っていないと作る事が出来ないので、root 権限が使えな無いのであれば、LD_LIBRARY_PATH で指定する方法を取る必要があります。
2.PATHを設定する
$export LD_LIBRARY_PATH=../cvc3/lib ant test
$ant test
exprot LD_LIBRARY_PATH=../cvs/lib とすれば、以降、ログアウトするまで LD_LIBRARY_PATH の設定は有効です。なので、
$ export LD_LIBRARY_PATH=../cvc3/lib $ ant test
という使い方になります。ただ、相対パスで指定すると、カレントディレクトリが変われば「../cvc3/lib」では目的のディレクトリ辿りつけないことになるので、フルパスで指定した方が良いです。