【问题标题】:source code can't find the include header files?源代码找不到包含头文件?
【发布时间】:2019-06-29 00:04:30
【问题描述】:

我有大量的源代码,其中大部分是用 Fortran90 语言编写的,但有些部分是用 C 语言编写的。为了正确编译此代码需要安装 MPI 和 HDF5。当我尝试编译模型时,我现在已经安装了它们(编译不是使用./compile 命令而是./install.sh,它会处理包括编译在内的所有事情)。我有一个很长的错误,并且都与头文件的路径有关。这是错误:

Can't find file: mpif.h
Can't find file: mpif.h
Can't find file: mpif.h
Can't find file: mpif.h
Can't find file: mpif.h
Can't find file: mpif.h
Can't find file: mpif.h
Can't find file: mpif.h
Can't find file: mpif.h
Can't find file: mpif.h
Can't find file: mpif.h
Can't find file: mpif.h
Can't find file: mpif.h
Can't find file: mpif.h
Can't find file: mpif.h
Can't find file: mpif.h
Can't find file: mpif.h 
Can't find file: mpif.h
Can't find file: mpif.h 
Can't find file: mpif.h
Can't find file: mpif.h  
Can't find file: mpif.h
Can't find file: mpif.h   
Can't find file: mpif.h
Can't find file: stdio.h
Can't find file: math.h
Can't find file: stdlib.h
Can't find file: malloc/malloc.h
Can't find file: malloc.h
Can't find file: stdlib.h
Can't find file: errno.h
Can't find file: string.h
Can't find file: ctype.h
Can't find file: dirent.h
Can't find file: string.h

之后还有一些其他错误,我认为它们与上述错误有关。我试图在 ./bashrc 中设置 PATH 并且当我搜索例如 locate mpif.h 它返回:

[hamid@localhost bin]$ locate mpif.h
   /home/hamid/Downloads/ED-2.1/ED/build/bin/mpif.h
   /home/hamid/Downloads/ED-2.1/ED/src/mpi/mpif.h
   /home/hamid/Downloads/mpich-3.1.3/src/binding/fortran/mpif_h/mpif.h
   /home/hamid/Downloads/mpich-3.1.3/src/binding/fortran/mpif_h/mpif.h.in
   /home/hamid/Downloads/mpich-3.1.3/src/include/mpif.h
   /home/hamid/mpich2-optimised/include/mpif.h

我还设置了 LD_LIBRARY_PATH 变量,例如:

export LD_LIBRARY_PATH=$MPI_DIR/lib:$LD_LIBRARY_PATH

但它似乎仍然无法正常工作。我的猜测是它不仅与 MPI 或 HDF 路径设置有关,因为其中一些是 GCC(C 编译器)头文件。 知道可能是什么问题吗?

【问题讨论】:

  • 你需要使用-I 选项到gcc 告诉它在哪里可以找到头文件。
  • 没有使用LD_LIBRARY_PATH 定位标头。使用-I 选项告诉它哪个目录包含您的标题。
  • 谢谢伙计们,我不知道该放在哪里-因为正如我所提到的,模型的编译不像简单的./compile、make 和 make install 编译。相反,它有 ,;/install bash 脚本。如果有兴趣here 是更多描述,我正在关注快速安装部分。
  • 我假设你有一个 makefile 来完成所有这些工作。在这样的行中: gcc $(CFLAGS) -c currentfile.c -o currentfile.o -Ipathtoheaders
  • 是否有一个名为 configure 或 config.in 或类似的文件?您可能必须先运行 make configure 之类的东西来配置 makefile。

标签: c parallel-processing fortran header-files


【解决方案1】:

正如 cmets 所说,您可以使用 -I 指定目录,然后编译器将在那里找到 .h 文件。例如:

gfortran -o name.o -c -I/usr/lib/openmpi/include name.f90

如果您使用ifort,另一种方法是将目录附加到FPATH,也许:

FPATH=$FPATH:usr/lib/openmpi/include

这不适用于 gfortran。我不知道其他编译器。

【讨论】:

    【解决方案2】:

    您的安装脚本似乎正在尝试使用常规编译器来编译 MPI 代码,这就是找不到所有这些标头的原因。尝试将您的 mpich 二进制目录添加到您的路径中。

    【讨论】:

      猜你喜欢
      • 2018-12-05
      • 1970-01-01
      • 1970-01-01
      • 2022-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多