【问题标题】:fatal error: 'stdio.h' file not found, when running mpicc cmd on macOS M1致命错误:在 macOS M1 上运行 mpicc cmd 时找不到“stdio.h”文件
【发布时间】:2022-01-18 04:58:15
【问题描述】:

当我尝试使用 mpicc "srcfile" -o "exfile" 编译 MPI 文件时,出现以下错误:

sump.c:3:10: fatal error: 'stdio.h' file not found
#include <stdio.h>
         ^~~~~~~~~
1 error generated.

但是当我使用gcc 运行普通系列代码时,我没有收到该错误。

我相信这是因为我使用以下命令错误地更改了一些路径:

export PATH="$(brew --prefix llvm)/bin:$PATH";  
export COMPILER=/usr/local/opt/llvm/bin/clang++   
export CFLAGS="-I /usr/local/include -I/usr/local/opt/llvm/include"
export CXXFLAGS="-I /usr/local/include -I/usr/local/opt/llvm/include"
export LDFLAGS="${LDFLAGS} -mlinker-version=450" 

我该如何解决这个问题?

【问题讨论】:

  • stdio.h 是否安装正确?它在哪里?在/usr/include?你能做一个用clang++mpicc编译的“hello world”程序吗?请注意,clang++ 是 C++ 编译器,而不是 C 编译器。另外,我会将-I 与目录(例如)-I dir --> -Idir [可能只是...] 邻接。如果stdio.h/usr/local/include 中,您可能需要:mpicc -I/usr/local/include "srcfile" -o "exfile"
  • 我在 /usr/local/include 中找不到 stdio.h,我可以使用 gcc 串行编译“Hello World”程序,但是当我使用 mpicc 编译时出现此问题,此问题在我执行后出现提到的配置。
  • mpiccC 编译器的包装器。你确定它会调用你期望的那个吗?如果你使用 Open MPI,你可以mpicc --showme srcfile.c 来查看调用了哪个命令行。
  • 知道stdio.h在哪里会有所帮助。在/usr/include [因为它不在/usr/local/include]? find / -name stdio.h 产生什么?您可以在 strace gcc ... 的等效项下运行编译器,并查看 gcc 在哪里找到文件(与 mpicc 在哪里 not 找到文件)。另外,if COMPILER 设置为 clang++ 而不是 clang,这 [不知何故] 会影响制作中的内容吗? (例如,make 告诉 mpicc 使用 clang++ 作为其底层 C 编译器?)
  • 嘿,这个错误你解决了吗?我有同样的问题。

标签: c parallel-processing mpi


【解决方案1】:

您可能会发现 XCode 的头文件安装在远离编译器预期的地方。我有一个这样的脚本:

# Set GCC environment for macOS Catalina 10.15 (and maybe beyond)

MACOSX_SDK="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk"
export LIBRARY_PATH="$MACOSX_SDK/usr/lib"
export CPATH="$MACOSX_SDK/usr/include"
export MANPATH="$(clnpath $MANPATH:$MACOSX_SDK/usr/share/man)"

CPATHLIBRARY_PATH 变量允许(自制)GCC 工作。我不知道它是否适用于您的编译器——您可能需要设置不同的变量。不过,这些头文件安装在$CPATH 下,因此您需要弄清楚如何告诉编译器查看那里。您或许可以将/usr/local/opt 下的符号链接设置为$MACOSX_SDK 中的值,然后将变量设置为较短的路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    • 2021-09-30
    • 2022-12-15
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多