1

如果我在 clearcase 视图中执行二进制文件,并在 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-config exe 实际上在:

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

(我想知道是否可以修改 clang 的 GetExecutablePath() 函数来解决这个问题。)

4

1 回答 1

1

这里没有简单的解决方案(尽管对于旧版本的 ClearCase):

技术说明“ PK27447:在清除动态视图中,Linux 上的 READLINK() 调用返回可执行文件的 /PROC/SELF/EXE 值的错误路径”建议:

本地修复

  1. 在预定用于 VOB/视图上下文的应用程序中使用getcwd(), get_current_dir_name(),getwd()
  2. 创建一个 interposer 库来拦截readlink()调用,并修改为使用上述任何调用来返回正确的数据

原因:

/proc/self/exe成功时返回不正确的路径getcwd

不幸的是,/proc/self/exe要返回正确的值 [从 VOB/视图上下文中] 将需要在 Linux 内核中进行更改以允许 MVFS “覆盖”当前设置。

IBM LTC 一直致力于让 Linux 社区采用此更改,以便我们可以在 MVFS 中合并新功能。

相关:错误 Sun 6189256

于 2012-11-30T18:40:20.823 回答