Gcc
編譯源碼出錯,可能與cpp有關
我正在嘗試編譯一些原始碼,但是當我在終端中輸入“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 <features.h> or any other header that includes 1 Error: Unclassifiable statement at (1) mod_prec.f90:22.4: <features.h> 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 <features.h> or any other header that includes <features.h> 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 <threads.h>. */
這是GCC 錯誤 #65387。正如您所看到的,它已被關閉,因為它不是一個錯誤。C/C++ 預處理器將 C/C++ 程式碼發送到您的後處理 Fortran 程序中,因為它是一個**C/C++**預處理器。
如果您要根據 GCC 自己的 Fortran doco將 C/C++ 預處理器與 Fortran 程序一起使用,那麼請執行 GCC Fortran doco 沒有告訴您的部分並使用
-fstandalone
.進一步閱讀
- GCC 錯誤 #59566
- https://stackoverflow.com/questions/25118052/
- “預處理器預包含”。移植到 GCC 4.8。GNU 項目:GCC。