3

Linuxマシンにいくつかのソフトウェアをインストールしようとしています(Pythonのrpy2パッケージ、特に重要な場合はrpy2.robjects)。/ usr / lib64のようなグローバル空間ではなく、ローカル空間で共有ライブラリを探すためのソフトウェアが必要です。このマシンの管理者権限がありません。私の問題は、ローカルスペースを指すようにLD_LIBRARY_PATHを設定しても、ソフトウェアが/ usr / lib64 / whateverに移動し、古いライブラリが検出されることです。これらのライブラリには必要なオブジェクトがいくつかないため、失敗します。LD_LIBRARY_PATHよりも優先される可能性があるものは何ですか?それを変更/削除する方法はありますか?ありがとう。

ところで、このサイトの誰かが1年以上前に同様の質問をしましたが、彼の答えはenv変数RPATHを含み、chrpathユーティリティでそれを変更しました。rpy2がRPATHを使用していることは私にはまったくわかりません。また、chrpathは私のシステムでは利用できないようです。

補遺:LD_DEBUG=libsで実行してみました。システムがLD_LIBRARY_PATHでライブラリを探して見つけているように見える出力がたくさんあります。ここから問題が発生しているようです。

/usr/local/lib64/R/library/methods/libs/methods.so: error: symbol lookup error:
undefined symbol: Rf_allocS4Object (fatal)
Error in dyn.load(file, DLLpath = DLLpath, ...) : 
unable to load shared object '/usr/local/lib64/R/library/methods/libs/methods.so':
/usr/local/lib64/R/library/methods/libs/methods.so: undefined symbol: Rf_allocS4Object

したがって、問題は、DLLpathにあるものがLD_LIBRARY_PATHをオーバーライドしていることだと思います。ディレクトリをos.environ['PATH']の前に追加してこれを変更しようとしましたが、変更しませんでした。私が思っていたように、どうやら「DLLPATH」はありません。

OK、それは進歩だと思います。誰か他に何かありますか?ありがとう。

4

4 に答える 4

4

$ R_HOME / etc / ldpathsという名前のファイルを見てください(あなたの場合、$R_HOMEは/usr / local / lib64 / Rのようです)。LD_LIBRARY_PATHRの起動時に設定されるのは、このファイル内のコマンドです。

私のはこのように見えます:

flodel@netbook-samsung-N150:~$ cat /usr/lib/R/etc/ldpaths 
: ${JAVA_HOME=/usr/lib/jvm/java-6-openjdk/jre}
: ${R_JAVA_LD_LIBRARY_PATH=${JAVA_HOME}/lib/i386/client:${JAVA_HOME}/lib/i386:/usr/lib/jni}
if test -n ""; then
: ${R_LD_LIBRARY_PATH=${R_HOME}/lib:}
else
: ${R_LD_LIBRARY_PATH=${R_HOME}/lib}
fi
if test -n "${R_JAVA_LD_LIBRARY_PATH}"; then
  R_LD_LIBRARY_PATH="${R_LD_LIBRARY_PATH}:${R_JAVA_LD_LIBRARY_PATH}"
fi
if test -z "${LD_LIBRARY_PATH}"; then
  LD_LIBRARY_PATH="${R_LD_LIBRARY_PATH}"
else
  LD_LIBRARY_PATH="${R_LD_LIBRARY_PATH}:${LD_LIBRARY_PATH}"
fi
export LD_LIBRARY_PATH

ファイルへの書き込みアクセス権がない場合でも、Rを開始する前にこれを行うことができます。

export R_LD_LIBRARY_PATH=/your/custom/path

Rの起動後に次のコマンドを実行して、マシンで動作することをテストしました。

Sys.getenv("LD_LIBRARY_PATH")
#[1] "/your/custom/path:/usr/lib/jvm/java-6-openjdk/jre/lib/i386/client:/usr/lib/jvm/java-6-openjdk/jre/lib/i386:/usr/lib/jni"
于 2012-07-25T23:51:54.340 に答える
1

誰かがまだこれを読んでいる場合は、問題を解決するために「人事エンジニアリング」を行いました。つまり、システム管理者にRを再インストールして、必要なものがすべて揃っているようにしました。確かに良かったです。提案してくださった皆様、本当にありがとうございました。それらのいくつかを続けたいのですが、私はこのプロジェクトで忙しくしなければなりません。とても感謝しております!

于 2012-07-31T15:46:29.917 に答える
0

RPATHコンパイルするときにのみ役立ちます(まあ、リンク)。バイナリにベイクされるライブラリ検索パスに影響します。

で実行してみてください。これによりLD_DEBUG=libs、ライブラリがどのパスからロードされているかが表示されます。それはあなたからロードしようとしていますLD_LIBRARY_PATHが失敗していますか、それともそもそもそこで検索していませんか(おそらくrpy2独自のライブラリパスメカニズムがありますか?)、または何か他のものですか?

于 2012-07-25T21:26:08.080 に答える
0

優先順位が左から右になるので、LD_LIBRARY_PATHの左側にディレクトリを追加してみてください。

export LD_LIBRARY_PATH=~/your/custom/path:$LD_LIBRARY_PATH
于 2012-07-25T21:36:28.217 に答える