1

クリアケースビューでバイナリを実行し、Linuxで/ proc / self / exeを見ると、次のようになります。

$ cd /proc/19220
$ ls -l exe
lrwxrwxrwx 1 peeterj pdxdb2 0 2012-11-30 13:04 exe -> /home/peeterj/views/peeterj_clang-7.vws/.s/00024/8000028250b8f1d1llvm-config

clang llvm-configプログラムは、不当にではなく、この出力を使用して、それが配置されている絶対完全修飾パスを見つけようとします(argv [0]が完全修飾されていない場合を想定しています)。

これが対応するビュー内の場所を見つける方法はありますか?たとえば、この場合、llvm-configexeは実際には次の場所にあります。

/ vbs / bldsupp / linuxamd64 / clang / debug / bin

(これを理解するためにclangのGetExecutablePath()関数を変更することが可能かどうか疑問に思っています。)

4

1 に答える 1

1

ここに簡単な解決策はありません(ただし、古いバージョンのClearCaseの場合):

テクニカルノート「PK27447:CLEARCASE DYNAMIC VIEW内で、LINUXのREADLINK()呼び出しは、実行可能ファイルの/ PROC / SELF/EXE値の間違ったパスを返します」は次のことを示唆しています。

ローカル修正

  1. VOB / Viewコンテキスト用に予定されているアプリケーションで、、をgetcwd()使用 get_current_dir_name()しますgetwd()
  2. 呼び出しをインターセプトするインターポーザーライブラリを作成しreadlink()、上記の呼び出しのいずれかを使用して適切なデータを返すように変更します

原因:

/proc/self/exegetcwd成功している間、不適切なパスを返します。

残念ながら、/proc/self/exe[VOB / Viewコンテキスト内から]適切な値を返すには、MVFSが現在の設定を「オーバーライド」できるようにLinuxカーネル内で変更する必要があります。

IBM LTCは、Linuxコミュニティにこの変更を採用してもらい、MVFSに新しい機能を組み込むことができるように取り組んでいます。

関連:バグサン6189256

于 2012-11-30T18:40:20.823 に答える