Gcc

編譯源碼出錯,可能與cpp有關

  • June 28, 2019

我正在嘗試編譯一些原始碼,但是當我在終端中輸入“make”命令時會產生錯誤。根據我有限的理解,當程式碼嘗試從 .F 文件生成 .f90 文件時,問題似乎出現了。從網上閱讀看來,問題可能與 c 預處理器有關。看起來 ac 標頭正在添加到 gfortran 遇到問題的 .f90 文件中。“make”命令後的輸出如下:

make: Circular mod_prec.o <- mod_prec.o dependency dropped.
make: Circular mod_prec.o <- mod_prec.o dependency dropped.

make: Circular mod_prec.o <- mod_prec.o dependency dropped.
/usr/bin/cpp-4.8 -P -C -traditional  -DGFORTRAN -P -C -traditional    -DWET_DRY -DMULTIPROCESSOR    -DLIMITED_NO  -DGCN                                        mod_prec.F > mod_prec.f90
/usr/bin/gfortran-4.8  -c   -I/home/dan/FVCOM3.2.2/FVCOM_source/libs/install/include        mod_prec.f90
Warning: Nonexistent include directory "/home/dan/FVCOM3.2.2/FVCOM_source/libs/install/include"
mod_prec.f90:1.1:

/* Copyright (C) 1991-2012 Free Software Foundation, Inc.
1
Error: Invalid character in name at (1)
mod_prec.f90:2.3:

  This file is part of the GNU C Library.
  1
Error: Unclassifiable statement at (1)
mod_prec.f90:4.3:

  The GNU C Library is free software; you can redistribute it and/or
  1
Error: Unclassifiable statement at (1)
mod_prec.f90:4.39:

  The GNU C Library is free software; you can redistribute it and/or
                                      1
Error: Unclassifiable statement at (1)
mod_prec.f90:5.3:

  modify it under the terms of the GNU Lesser General Public
  1
Error: Unclassifiable statement at (1)
mod_prec.f90:6.3:

  License as published by the Free Software Foundation; either
  1
Error: Unclassifiable statement at (1)
mod_prec.f90:6.57:

  License as published by the Free Software Foundation; either
                                                        1
Error: Unclassifiable statement at (1)
mod_prec.f90:7.3:

  version 2.1 of the License, or (at your option) any later version.
  1
Error: Unclassifiable statement at (1)
mod_prec.f90:9.3:

  The GNU C Library is distributed in the hope that it will be useful,
  1
Error: Unclassifiable statement at (1)
mod_prec.f90:10.3:

  but WITHOUT ANY WARRANTY; without even the implied warranty of
  1
Error: Unclassifiable statement at (1)
mod_prec.f90:10.29:

  but WITHOUT ANY WARRANTY; without even the implied warranty of
                            1
Error: Unclassifiable statement at (1)
mod_prec.f90:11.3:

  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  1
Error: Unclassifiable statement at (1)
mod_prec.f90:12.3:

  Lesser General Public License for more details.
  1
Error: Unclassifiable statement at (1)
mod_prec.f90:14.3:

  You should have received a copy of the GNU Lesser General Public
  1
Error: Unclassifiable statement at (1)
mod_prec.f90:15.3:

  License along with the GNU C Library; if not, see
  1
Error: Unclassifiable statement at (1)
mod_prec.f90:15.41:

  License along with the GNU C Library; if not, see
                                        1
Error: Unclassifiable statement at (1)
mod_prec.f90:16.4:

  <http://www.gnu.org/licenses/>.  */
   1
Error: Invalid character in name at (1)
mod_prec.f90:19.1:

/* This header is separate from features.h so that the compiler can
1
Error: Invalid character in name at (1)
mod_prec.f90:20.3:

  include it implicitly at the start of every compilation.  It must
  1
Error: Unclassifiable statement at (1)
mod_prec.f90:21.3:

  not itself include &lt;features.h&gt; or any other header that includes
  1
Error: Unclassifiable statement at (1)
mod_prec.f90:22.4:

  &lt;features.h&gt; because the implicit include comes before any feature
   1
Error: Invalid character in name at (1)
mod_prec.f90:23.3:

  test macros that may be defined in a source file before it first
  1
Error: Unclassifiable statement at (1)
mod_prec.f90:24.3:

  explicitly includes a system header.  GCC knows the name of this
  1
Error: Unclassifiable statement at (1)
mod_prec.f90:25.3:

  header in order to preinclude it.  */
  1
Error: Unclassifiable statement at (1)
mod_prec.f90:27.1:

/* Define __STDC_IEC_559__ and other similar macros.  */
1
Error: Invalid character in name at (1)
Fatal Error: Error count reached limit of 25.
make: *** [mod_prec.o] Error 1

我是 linux 新手,我對 C 或 FORTRAN 沒有真正的了解,所以如果問題很愚蠢,我深表歉意。

輸出文件(在本例中為 mod_prec.f90)包含以下標頭,這是由於註釋為 C 格式而導致錯誤的原因:

/* Copyright (C) 1991-2012 Free Software Foundation, Inc.
  This file is part of the GNU C Library.

  The GNU C Library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  The GNU C Library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with the GNU C Library; if not, see
  <http://www.gnu.org/licenses/>.  */


/* This header is separate from features.h so that the compiler can
  include it implicitly at the start of every compilation.  It must
  not itself include &lt;features.h&gt; or any other header that includes
  &lt;features.h&gt; because the implicit include comes before any feature
  test macros that may be defined in a source file before it first
  explicitly includes a system header.  GCC knows the name of this
  header in order to preinclude it.  */

/* Define __STDC_IEC_559__ and other similar macros.  */
/* Copyright (C) 2005 Free Software Foundation, Inc.
  This file is part of the GNU C Library.

  The GNU C Library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  The GNU C Library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with the GNU C Library; if not, write to the Free
  Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  02111-1307 USA.  */



/* We do support the IEC 559 math functionality, real and complex.  */


/* wchar_t uses ISO/IEC 10646 (2nd ed., published 2011-03-15) /
  Unicode 6.0.  */

/* We do not support C11 &lt;threads.h&gt;.  */

這是GCC 錯誤 #65387。正如您所看到的,它已被關閉,因為它不是一個錯誤。C/C++ 預處理器將 C/C++ 程式碼發送到您的後處理 Fortran 程序中,因為它是一個**C/C++**預處理器。

如果您要根據 GCC 自己的 Fortran doco將 C/C++ 預處理器與 Fortran 程序一起使用,那麼請執行 GCC Fortran doco 沒有告訴您的部分並使用-fstandalone.

進一步閱讀

引用自:https://unix.stackexchange.com/questions/197881