MakefileからLD_LIBRARY_PATH環境変数を設定するにはどうすればよいですか?
共有ライブラリにリンクするソースコードがいくつかあり、それが別の共有ライブラリ(複数)にリンクしています。アプリケーションを構築するためのMakefileは、最初の共有ライブラリについてのみ認識します。
これを作成する場合は、次のように指定する必要があります。#export LD_LIBRARY_PATH=/path/to/the/shared/libs
(bashの場合)これで問題なく動作します。
ただし、これはMakefile自体から実行したいと思います。
はい、「エクスポート」は使用する正しいディレクティブです。詳細に文書化されています ここ 。これは、make自体が変数をサブmakeに伝播するために使用するのと同じメカニズムです。欠点は、変数を一部のコマンドに選択的に渡して、他のコマンドに渡さないことです。
私が考えることができる他の2つのオプションがあります:
.EXPORT_ALL_VARIABLES
(どこかにターゲットとして指定)を使用すると、すべての変数がサブコマンドの環境にエクスポートされます。コマンドラインで指定します。
foo:
EXPORTEDVAR=somevalue gcc $< -o $@
メイクファイル内でLD_LIBRARY_PATH変数をエクスポートしたくない場合(たとえば、すべてが変数に追加される再帰的なメイクファイルがあるため)、コンパイラとリンカへのすべての呼び出しにバインドしたままにすることができます。
ターゲットルール内のすべてのgccおよびld呼び出しに直接追加します。
my_target: my_target.o
LD_LIBRARY_PATH=/my/library/path gcc -o my_target my_target.o
または、コンパイラにパスを含めることを定義するグローバルmake変数を設定します。例:
CC=LD_LIBRARY_PATH=/my/library/path gcc
CPP=LD_LIBRARY_PATH=/my/library/path gcc
CXX=LD_LIBRARY_PATH=/my/library/path gcc
私はコンパイラとしてgccを選択しましたが、もちろん、好きなコンパイラを使用できます。
同じ問題が発生しました。LD_LIBRARY_PATHをエクスポートする必要がありました。
export LD_LIBRARY_PATH=/path/to/the/shared/libs ; my_command
LD_LIBRARY_PATHが1つのコマンドにのみ適用される場合、私の友人は私に代替案を示しました。下にセミコロンがないことに注意してください。
LD_LIBRARY_PATH=/path/to/the/shared/libs my_command
この 記事 詳細を説明します。
私は追加しようとしました:
export LD_LIBRARY_PATH=/path/to/the/shared/libs
これは明らかに正常に機能します。
/ path/to/the/shared/libsが正しくなかったため、エラーが発生していました。
他の人がこれのために何をしているのか、そして/またはより良い方法があるかどうかを知ることはまだ良いでしょう。