1

Kubuntuにソフトウェアが正しくインストールされています。

現在、いくつかのライブラリにパッチを適用してテストしています。

公式ライブラリの代わりにパッチを適用したライブラリをロードするように、bashからソフトウェアを起動するにはどうすればよいですか?

例:
公式ライブラリは/ usr / lib /にあり
ます私のパッチライブラリ(テスト開発中に使用されます)は/ home / user / dev /lib/にあります

私は試した:

$ set LD_LIBRARY_PATH=/home/user/dev/lib/  
$ binary_app &

しかし、役に立たない。

bashから設定できるソリューションが望ましいのですが、それが不可能な場合は、このC++ソフトウェアのcmakeファイルを変更することもできます。

目的は、バニラライブラリ、またはパッチを適用したライブラリを使用してアプリケーションを簡単に起動し、違いを確認できるようにすることです。

編集:それはKDE.soファイルです

私がテストしているライブラリはKDE4ライブラリです。公式ライブラリは/usr/ lib /kde4/にあります。そのディレクトリでは、ライブラリのいずれもlibプレフィックス で始まりません。

私がするかどうか:

/lib/ld-linux-x86-64.so.2 --list  --library-path PATH EXEC  

また

ldd EXEC  

ライブラリはまったくリストされていません。

一方、元のライブラリを/ usr / lib / kde4 /から移動すると、アプリケーションは起動しますが、対応する機能が失われます。

KDE4ライブラリは特定の方法でロードされますか?設定する変数が違うかもしれません...

編集2

すべての答えは良くて便利です...残念ながら、問題はlibパス設定に関連していないようです。プラグインアーキテクチャを扱っていますが、.soロードパスがアプリケーションのどこかにハードコーディングされているようです。何が起こっているのかを理解するために、ソースコード内でもっと時間を費やす必要があります...すべてに感謝し、+1します。

4

5 に答える 5

7

'man bash'から:

ビルトイン関数やシェル関数以外の単純なコマンドを実行する場合は、以下からなる別の実行環境で呼び出されます。特に明記されていない限り、値はシェルから継承されます。

[....]

・環境に渡された、コマンド用にエクスポートされた変数とともに、エクスポート用にマークされたシェル変数と関数

実行するプログラムに表示されるようにするには、変数を「エクスポート」する必要があります。

ただし、次のことも試すことができます。

/lib/ld-linux.so.2--library-pathパス実行可能ファイル

http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.htmlを参照してください

于 2011-02-04T08:49:57.993 に答える
5

export LD_LIBRARY_PATH=...セットの代わりに試してください。

于 2011-02-04T08:44:59.423 に答える
3

私はすでにこれをコメントに入れましたが、それについて考えた後、これを行うための最良の方法(テスト/デバッグのためだけに別のライブラリを使用する)はを使用することだと思います。LD_PRELOADトリックとは何ですか?LD_PRELOADを参照してください。

マニュアルページから:

LD_PRELOAD

他のすべてのライブラリよりも先にロードされる、ユーザー指定の追加のELF共有ライブラリの空白で区切られたリスト。これは、他の共有ライブラリの関数を選択的にオーバーライドするために使用できます。set-user-ID / set-group-ID ELFバイナリの場合、set-user-IDでもある標準検索ディレクトリ内のライブラリのみがロードされます。

アップデート:

更新された質問の後、アプリケーションはdlopen絶対パスを使用してライブラリを開くために使用しているようです。私はあなたがそれについて何もできないと思います。見るman dlopen

Update2:

たぶんあなたができることがあるでしょう:あなたはあなた自身のライブラリへのパスを変更するLD_PRELOADあなた自身の関数にできるかもしれません...dlopen

于 2011-02-04T09:11:32.670 に答える
2

たまたまsetuidやsetgidをアプリしませんか?この場合、LD_LIBRARY_PATHは無視されます。

于 2011-02-04T08:51:49.410 に答える
2

すべてを1行にまとめます。

LD_LIBRARY_PATH=foo binary_app&
于 2011-02-04T09:05:26.390 に答える