【发布时间】:2019-05-28 04:45:25
【问题描述】:
一个月前,我在this Stack Overflow answer 之后在 macOS Mojave 上安装了 Open MPI 4.0.1。
当时一切正常,我设法编译并运行了 hello.c 和其他一些程序。
但是,当我今天尝试使用 $HOME/opt/usr/local/bin/mpicc -o program_name ./program_name.c 编译任何程序时,我收到错误 clang: error: no such file or directory: './program_name.c',即使这些文件位于该目录中。
它甚至不适用于 hello.c。
但是当我尝试使用$HOME/opt/usr/local/bin/mpirun -np 4 hello 运行现有程序时,例如你好,它可以工作。
所以我不明白如果 mpi 可以找到并运行现有程序,但无法编译同一目录中的文件,我怎么会收到错误 no such file or directory。
我也尝试使用cd $HOME/opt/usr/local/bin 在该目录中定位,然后执行mpicc -o hello ./hello.c,但随后出现错误-bash: mpicc: command not found。
有谁知道问题出在哪里以及如何解决?
【问题讨论】:
-
$HOME/opt/usr/local/bin/mpicc -o /my_full_path/program_name /my_full_path/program_name.c工作得更好吗?它不是抱怨找不到编译器,而是找不到.c文件。 -
一般的方法是在
$PATH后面加上mpicc(比如export PATH=$HOME/opt/usr/local/bin:$PATH)然后mpicc -o program_name program_name.c启动的时候,你确定你的当前目录里面有program_name.c(例如ls应该列出它)? -
命令
$HOME/opt/usr/local/bin/mpicc -o $HOME/opt/usr/local/bin/program_name ./$HOME/opt/usr/local/bin/program_name.c没有帮助,但我尝试将文件复制到桌面,然后运行命令$HOME/opt/usr/local/bin/mpicc -o Desktop/program_name ./Desktop/program_name.c并且它有效! -
我没有将
mpicc添加到$PATH,我可以试试。是的,当前目录有program_name.c,并以ls列出。 -
在完整路径命令中,
.c列为./$HOME/...(与$HOME/...相比)。这是你做的,还是这里的错字?我的第二个例子应该工作。如果没有,则可能是某些 macOS 特定问题(即,它在不应该更改当前目录时更改了当前目录)。您可以在strace下运行mpicc来跟踪编译器正在执行的chdir、open等,看看它是否有什么奇怪的事情。