Teamviz符号链接



最近我下载了TeamViz(前pomodoro应用程序)。它是不可安装的,所以我只是运行可执行文件。/Teamviz和它的工作。我想让它在终点站运行。所以我要做的是

sudo mv TeamViz /opt
sudo ln -s /opt/TeamViz/TeamViz /usr/bin/teamviz

当我输入teamviz时,我得到这个错误

terminate called after throwing an instance of 'std::logic_error'
what():  basic_string::_S_construct null not valid
Aborted (core dumped)

然而,如果我运行。/TeamViz,一切都很顺利。

我做错了什么,如何解决它(我或问题)?

TeamViz最有可能试图找到与运行它有关的信息。在这种情况下,它(最有可能)在/usr/bin中查找与TeamViz相关的文件。

正确的启动方式是一个stub脚本,而不是一个符号链接,例如:

#!/bin/bash -p
exec /opt/TeamViz/TeamViz "$@"

放置为可执行/usr/bin/TeamViz .

在应用程序中设置"self host"是很常见的。

通常应用程序使用dirname(argv[0])来确定它的运行目录而不是dirname(realpath(argv[0])),因此错误地检测到它的启动目录是符号链接所在的位置,而不是真正的二进制文件所在的位置。一个这样的例子如下:

$ cat for_reals.c 
#include <stdlib.h>
#include <stdio.h>
int
main(int argc, char **argv)
{
    char realdest[1024];
    realpath(argv[0], realdest);
    printf("%sn", realdest);
    return 0;
}
$ make for_reals
cc     for_reals.c   -o for_reals
$ ./for_reals 
/Users/petesh/Development/experiments/for_reals/for_reals
$ ln -fs for_reals charlie
$ ./charlie
/Users/petesh/Development/experiments/for_reals/for_reals

相关内容

  • 没有找到相关文章

最新更新