2017-03-27 19 views
0

我試圖使用ifort編譯.f文件。聲明標籤字段中的非法字符 - 編譯.f擴展名時

我得到了以下錯誤:

/.../wreqvr.f(2):錯誤#5149:在聲明標籤領域[H] 此文件是GNU C庫的一部分非法字符。 ----^

從以下建議: https://software.intel.com/en-us/forums/intel-visual-fortran-compiler-for-windows/topic/293662 - >說,更改擴展名.F到.F90的作品。

有沒有其他解決方案? (我不想更改擴展名,因爲代碼是由Git管理的...)

我對舊機器使用了相同的ifort版本,該版本沒有錯誤地正常工作。

我不明白爲什麼會出現這個錯誤。

我的舊機和新機之間的唯一區別是CentOS的版本(老6,新7)

是否gcc版本此事有關這個錯誤?


我添加了部分代碼和錯誤消息。在這裏:coord.f文件

​​

$ ifort coord.f

coord.f(1): error #5149: Illegal character in statement label field [/] 
/* Copyright (C) 1991-2012 Free Software Foundation, Inc. 
^ 
coord.f(1): error #5149: Illegal character in statement label field [*] 
/* Copyright (C) 1991-2012 Free Software Foundation, Inc. 
-^ 
coord.f(1): error #5149: Illegal character in statement label field [C] 
/* Copyright (C) 1991-2012 Free Software Foundation, Inc. 
---^ 
coord.f(1): error #5149: Illegal character in statement label field [o] 
/* Copyright (C) 1991-2012 Free Software Foundation, Inc. 
----^ 
coord.f(1): error #5118: First statement in file must not be continued 
/* Copyright (C) 1991-2012 Free Software Foundation, Inc. 
-----^ 
coord.f(2): error #5149: Illegal character in statement label field [T] 
    This file is part of the GNU C Library. 
---^ 
coord.f(2): error #5149: Illegal character in statement label field [h] 
    This file is part of the GNU C Library. 
----^ 
coord.f(4): error #5149: Illegal character in statement label field [T] 
    The GNU C Library is free software; you can redistribute it and/or 
---^ 
coord.f(4): error #5149: Illegal character in statement label field [h] 
    The GNU C Library is free software; you can redistribute it and/or 

$ ifort - 免費coord.f 或 $ ifort coord.f90

coord.f(1): error #5082: Syntax error, found '/' when expecting one of: <LABEL> <END-OF-STATEMENT> ; BLOCK BLOCKDATA PROGRAM MODULE TYPE BYTE CHARACTER ... 
/* Copyright (C) 1991-2012 Free Software Foundation, Inc. 
^ 
coord.f(16): error #5145: Invalid blank/tab 
    <http://www.gnu.org/licenses/>. */ 
----------------------------------^ 
coord.f(20): error #5145: Invalid blank/tab 
    include it implicitly at the start of every compilation. It must 
-----------------------------------------------------------^ 
coord.f(29): error #5143: Missing mandatory separating blank 
/* wchar_t uses ISO/IEC 10646 (2nd ed., published 2011-03-15)/
--------------------------------^ 
coord.f(30): error #5145: Invalid blank/tab 
    Unicode 6.0. */ 
---------------^ 
+0

你是否確認改變擴展名是否有效?代碼在哪裏?參見[mcve]和[問]。 –

+0

In Intol Fortran使用'-free'來強制固定的源代碼格式(.f90之一)。 –

+0

*「海灣合作委員會版本是否有關這個錯誤的問題?」*這與GCC無關...... –

回答

0

如果文件是原件你正在編譯的文件,你應該刪除C風格的評論。

它們以/*開始並以*/結束。

這些塊不是合法的Fortran。 C預處理器會丟棄它們,但即使您啓用了ifort -fpp預處理,它們也不會被丟棄。只有C預處理器丟棄它們。

另請參閱How do I compile this Fortran code with new 2017 ifort?以解決類似問題。

幾乎可以肯定的是,某人之前使用C預處理器創建了這些文件。這是錯誤的。不要單獨使用C預處理器來處理Fortran源文件。

,並且不使用gcc預處理的Fortran源,它是一個C預處理器,它使用C預處理器在一個錯誤的模式。您可以通過使用Fortran編譯器的預處理器(gfortran -cppifort -fpp - 小心CPP和FPP略有不同),但不直接使用C預處理和不使用C編譯器。

+0

非常感謝您的幫助。 正如你所回答的,在我的代碼包中有使用gcc的C預處理步驟。 Centos 7中的gcc版本與Centos 6不同。 由於此版本的差異,在新gcc中未正確執行預處理,因此C風格的評論已遺留。 gcc版本更改修復了這個問題。 (或將操作系統更改爲具有舊版本gcc的舊版本...) gcc 4.8.5不起作用。 gcc 4.4.7作品。 –

+0

重要的是C預處理器的版本,而不是GCC本身。你可以用'fpp'或'ifort -fpp'或'gfortran -cpp'進行預處理,並且不會有C註釋。請記住,當我問到它是否真的是原始的**代碼?... –

+0

原始代碼擴展名是.F 除了/ * * /部分之外,它具有相同的內容。它從子程序座標開始...... –