如果我在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/linuamd64/crang/debug/bin
(我想知道修改clang的GetExecutablePath()函数是否可行。)
这里没有琐碎的解决方案(不过对于ClearCase的旧版本):
技术专家"PK27447:在CLEARCASE动态视图中,LINUX上的READLINK()调用返回可执行程序的/PROC/SELF/EXE值的错误路径"建议:
本地修复
- 在预定用于VOB/View上下文的应用程序中使用
getcwd()
、get_current_dir_name()
和getwd()
- 创建一个插入器库来拦截
readlink()
调用,并修改为使用上面的任何调用来返回正确的数据
原因:
/proc/self/exe
返回不正确的路径,而getcwd
成功。不幸的是,
/proc/self/exe
要[从VOB/View上下文中]返回正确的值,需要在Linux内核中进行更改,以允许MVFS"覆盖"当前设置。IBMLTC一直致力于让Linux社区采用这一更改,这样我们就可以将新功能纳入MVFS中。
相关:Bug Sun 6189256。