我已经安装了一个名为“ OMPi”的软件(在make之后,它生成了两个可执行文件ompiccompi,您可以使用ompicc -x file做某事,并且ompi将被ompicc调用)。

当我在目录“ /my_path/ompi-1.1/compiler”中运行命令ompicc ~/Documents/example.c时(ompicc在此处,ompi在子路径“ ./ompi/”中),出现错误:1: /my_path/ompi-1.1/compiler/ompi:权限被拒绝。但是,当我在其他任何目录中运行同一命令时,都没有发生该错误。

sudo chmod 777 -R ompi-1.1没有用。

我认为可能是因为sub_path“ ./ompi/”与文件ompi具有相同的名称。因此,我在home_path中创建了一个名为“ ompi /”的目录,然后运行上述命令。令我惊讶的是,没有发生错误。似乎仅在我在以下目录中运行命令时才会出现该错误:/my_path/ompi-1.1/compiler/

information in terminal

最佳答案

从它的外观(我已经简要检查了ompi的源代码)来看,ompicc希望ompi程序位于同一目录中。在主目录中创建/ 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必须位于同一文件夹/目录中。

10-06 10:46