【问题标题】:Teamviz symbolic linkTeamviz 符号链接
【发布时间】:2014-08-21 12:27:02
【问题描述】:

最近我下载了 TeamViz(前番茄钟应用)。它不可安装,所以我只运行可执行文件 ./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 运行它,一切都会顺利。

我做错了什么以及如何解决(我或问题)? 提前致谢。

【问题讨论】:

    标签: c++ std symlink stdstring


    【解决方案1】:

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

    启动它的正确方法是存根脚本,而不是符号链接,例如类似:

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

    作为可执行文件放置/usr/bin/TeamViz

    “自托管”应用程序出现此问题并不少见。

    通常,该应用程序使用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("%s\n", 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 2021-12-19
      • 2019-04-04
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      相关资源
      最近更新 更多