ld_library_pathを無視し、リンク時に-rpathを通して与えられたライブラリに固執します

StackOverflow https://stackoverflow.com/questions/2408172

  •  18-09-2019
  •  | 
  •  

質問

私は私が本当のコントロールを持っていない環境に座っています(それは私だけではないので、基本的に、私は環境を変えることはできませんし、他の人にはうまくいきません)、私が影響を与えることができるのはどのように影響するかだけですバイナリが構築されています。

私の問題は、環境が使用されているコンパイラと互換性がないLIBSTDC ++を含むLD_LIBRARY_PATHを指定することです。私はそれを静的にコンパイルしようとしましたが、それはG ++では不可能と思われます(バージョン4.2.3は、以降のバージョンではこの方向で行われたように思われますが、利用できない - static -libstdc ++など)。

今、私はRPATHを使用して絶対パス名を実行可能ファイルに焼くように到達しました(動作する、実行すると思われるすべてのマシンは同一です)。残念ながら、LD_Library_PathがRPATHより優先されるように見えます(LD_LIBRARY_PATHのリセットは、ライブラリを見つけることができることを確認しましたが、上記のように、LD_Library_Pathはすべての人に設定され、それを変更することはできません)。

rpathにld_library_pathよりも優先させる方法はありますか、それとも私の問題に対する他の可能な解決策がありますか?実行時に動的リンクについて話していることに注意してください。コンパイル時間とリンク時間でコマンドラインを制御できることに注意してください。

ありがとう。

役に立ちましたか?

解決

リンク libstdc++.a トリッキーではありますが、間違いなく可能です。指示 ここ.

私はあなたの主張に少し懐疑的です LD_LIBRARY_PATH 「ベイクドイン」よりも優先される DT_RPATH しかし - 少なくともLinuxと(私は信じている)Solarisでは、 LD_LIBRARY_PATH 後に見られるだけです DT_RPATH ルックアップは失敗しました。

他のヒント

たぶん、このプログラムのために環境を変更するシェルラッパーを使用できますか?

#!/bin/sh

LD_LIBRARY_PATH="/path/to/your/lib:${LD_LIBRARY_PATH}"
export LD_LIBRARY_PATH
exec /path/to/binary $@

これにより、実行前にLD_Library_Pathに過負荷をかけ、execを介してラッパーをバイナリに置き換える必要があります。

これは助けになりますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top