sh:1:/my_path/ompi-1.1/compiler/ompi:当我运行我的C程序时权限被拒绝

时间:2018-06-08 03:09:49

标签: c sh permission-denied

我安装了一个名为" OMPi" (在make之后,它生成了两个可执行文件ompiccompi,您可以使用ompicc -x file执行某些操作,并ompi将调用ompicc 1}})。

当我在目录" /my_path/ompi-1.1/compiler"中运行命令ompicc ~/Documents/example.c时; (ompicc在此处且ompi位于sub_path" ./ ompi /")中,发生错误 sh:1:/my_path/ompi-1.1/compiler / ompi:许可被拒绝。但是当我在任何其他目录中运行相同的命令时,错误都没有发生。

sudo chmod 777 -R ompi-1.1没用。

我认为这可能是因为sub_path" ./ ompi /"与文件ompi获取相同的名称。所以,我创建了一个名为" ompi /"的目录。在home_path中,然后运行上面的命令。令我惊讶的是,错误并没有发生。似乎只有在目录中运行命令时才会出现错误:/my_path/ompi-1.1/compiler/

information in terminal

1 个答案:

答案 0 :(得分:0)

从它的外观(我已经简要检查过ompi的源代码), ompicc 预计 ompic 程序位于同一目录中。在主目录中创建/ ompi /后,它工作正常,因为在 ompicc 所在的目录中仍然具有相同名称的可执行文件。它在您指定的目录中不起作用,因为那里只有一个 ompi ,这是一个目录。

在ompicc.c中执行的行(构造的命令然后由 system()调用运行:

sprintf(cmd, "%s%s%s \"%s.pc\" __ompi__%s%s%s%s%s%s%s %s > \"%s\"%s",
        usegdb ? "gdb " : "", /* Run gdb instead of running _ompi directly */
        RealOmpiName,
        usegdb ? " -ex 'set args" : "", /* Pass the arguments */
       /* ...further arguments here... */

确认RealOmpiName是' ompi'我按照计划和 RealOmpiName 追溯到(通过外部符号OmpiName) Makefile.am:

-DOmpiName='"_@PACKAGE_TARNAME@"' \

然后使用这个(安装软件):

cp -f ompi $(DESTDIR)$(bindir)/_@PACKAGE_TARNAME@
cp -f ompicc $(DESTDIR)$(bindir)/@PACKAGE_TARNAME@cc

我认为如果安装程序并不要求两个程序首先放在同一个目录中,那么安装程序就不会将这两个程序放在一起。

解决方案: ompi和ompicc必须位于同一文件夹/目录中。