web-dev-qa-db-ja.com

MakefileからLD_LIBRARY_PATHを設定します

MakefileからLD_LIBRARY_PATH環境変数を設定するにはどうすればよいですか?

共有ライブラリにリンクするソースコードがいくつかあり、それが別の共有ライブラリ(複数)にリンクしています。アプリケーションを構築するためのMakefileは、最初の共有ライブラリについてのみ認識します。

これを作成する場合は、次のように指定する必要があります。#export LD_LIBRARY_PATH=/path/to/the/shared/libs(bashの場合)これで問題なく動作します。

ただし、これはMakefile自体から実行したいと思います。

17
RD.

はい、「エクスポート」は使用する正しいディレクティブです。詳細に文書化されています ここ 。これは、make自体が変数をサブmakeに伝播するために使用するのと同じメカニズムです。欠点は、変数を一部のコマンドに選択的に渡して、他のコマンドに渡さないことです。

私が考えることができる他の2つのオプションがあります:

  • .EXPORT_ALL_VARIABLES(どこかにターゲットとして指定)を使用すると、すべての変数がサブコマンドの環境にエクスポートされます。
  • コマンドラインで指定します。

    foo:
        EXPORTEDVAR=somevalue gcc $< -o $@
    
10
JesperE

メイクファイル内で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を選択しましたが、もちろん、好きなコンパイラを使用できます。

9
jkow

同じ問題が発生しました。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

この 記事 詳細を説明します。

3
MioDeals

私は追加しようとしました:

export LD_LIBRARY_PATH=/path/to/the/shared/libs

これは明らかに正常に機能します。

/ path/to/the/shared/libsが正しくなかったため、エラーが発生していました。

他の人がこれのために何をしているのか、そして/またはより良い方法があるかどうかを知ることはまだ良いでしょう。

2
RD.