在Cygwin中安装gfortran

时间:2015-08-19 06:46:22

标签: fortran cygwin fortran90 gfortran

我正在尝试使用gfortran或g95编译器在Cygwin中编译建模程序。我已经安装了两个编译器,但是当我去配置程序时,它会检查编译器,然后找不到(error: Fortran compiler cannot create executables)。我是Cygwin的新手 - 我怀疑它与我安装编译器的方式/位置有关...有什么想法吗?

谢谢,

L,

2 个答案:

答案 0 :(得分:1)

对于使用autotools的初学者来说,这个问题很常见。它可以是:

  1. 缺少图书馆;这可能会丢失项目或编译器/系统库的库,例如libgfortran或类似的g95。
  2. autotools无法检测到您的编译器;
  3. 动态库问题;未设置动态库的运行时路径。有关linux环境,请参阅LD_LIBRARY_PATH
  4. 交叉编译问题,我对cygwin了解不多,但这可能是一个问题。我也不是交叉编译的专家。它也可能是我不知道的另一种情况。
  5. 我遇到了第一和第三种情况。

    解决方案的方法。

    1. 确保您可以手动编译并运行简单的hello world程序。必要时安装缺少的库。另外,请确保您可以将hello world程序与建模程序使用的相同库链接起来,最后一条语句可能会引导您进入第三种情况。
    2. 将编译器的路径添加到PATH变量或cygwin中的类似变量。或者明确地给出要配置的编译器的完整路径。
    3. 将库的路径添加到linux环境的运行时库路径LD_LIBRARY_PATH或cygwin中的类似变量。在我的一个案例中,问题是autotools用于测试编译器的测试程序无法运行。它已成功编译但无法运行。我安装了项目在未包含在库路径中的路径中使用的所有库。发生的事情是这些库的路径设置在configure.acmakefile.am中,以便编译正常。但是配置中包含的测试程序的运行找不到它们。这是一个主要用于动态链接库的问题。将我的.so路径添加到LD_LIBRARY_PATH解决了问题。
    4. 嗯,我真的无法帮助。我建议的唯一解决方案是安装一个Linux系统(双启动或虚拟机),如果你知道如何做,因为我不会帮助你。
    5. 以下link也可以提供帮助。

答案 1 :(得分:0)

对我来说,让可执行代码通过此过程会更有用,所以我要介绍一些。这可以解决您的问题,

  

我怀疑这与我安装编译器的方式/位置有关...

因为从apt-cyg开始的安装应该有助于使系统知道在哪里寻找编译器。我也在解决一个可能的链接问题。

bballdave025@MY-MACHINE /cygdrive/c/bballdave025
$ apt-cyg install gcc-fortran libgfortran5

如果您还没有apt-cyg,请按照another answer中的说明进行操作。

# Get to where your setup executable lives.
# This is what you used to install Cygwin the first time.
# Note that mine is for the 64-bit version, and that
# I keep mine in C:\cygwin64. Your path might be
# different. You also might need to re-download
# The setup executable from Cygwin.

$ cd /path/to/setup_install/setup_x86-64.exe -q -P wget
$ wget https://raw.githubusercontent.com/transcode-open/apt-cyg/master/apt-cyg
$ chmod +x apt-cyg
$ mv apt-cyg /usr/local/bin

可能需要libgfortran5(或更新的版本,如果在搜索时可用)。这就是我认为可能是这种情况的原因。

bballdave025@MY-MACHINE /cygdrive/c/bballdave025
$ man gcc | grep -A 3 "[ ]*[-]l[ ]\{0,2\}library$"
       -llibrary
       -l library
           Search the library named library when linking.  (The second
           alternative with the library as a separate argument is only for
           POSIX compliance and is not recommended.)

(请注意,我没有包含结果的某些部分,这些部分没有用,可以通过在命令前加上MANWIDTH=160,比照here来解决。)

关于文件上的lib前缀,与the answer to a question有更多的细节和不同的结果:

  

您可以随意命名一个库,但是如果您想让gcc的-l标志找到正确的库,则需要使用链接描述的方式对其进行命名。例如,gcc -o myapp myapp.c -lm,[w]将编译myapp.c,将生成的对象与libm.a链接,并输出一个名为myapp的可执行文件。如今,可能会有更复杂的搜索路径,其中涉及动态库名称等,但是您应该从此示例中获得基本思路。 [此外,您可以在gcc手册页的以下部分中进行浏览:

     
    

-l library ...

         

...用lib和.a包围库,并搜索几个目录。

  

所有这些信息的基本原因是:很可能为了与 gfortran 库链接,您需要安装一个软件包命名为 libgfortran。我不确定这是如何工作的,特别是在Cygwin man页面稍有不同的情况下,但是值得尝试。在这种情况下,您可能需要的其他东西是类似的

apt-cyg install libgfortran

apt-cyg install libgfortran5


以下是一些有关如何找到要安装的内容的有用信息。当遇到类似问题时,我去了Cygwin package search,但是我只有三个条目,其中包含三个版本的netcdf-fortran

Only 3 versions of <code>netcdf-fortran</code> from Cygwin Package Search

archived)。我想要gfortran,所以我一直在寻找

我在this SO answer中找到了一个不错的gfortran答案。有了这个答案,我回到了Complete Cygwin Package List,带着值得信赖的 Ctrl + F 武装起来,因为我知道有些软件包与从搜索。完整列表中有

  

cygwin64-gcc-fortran用于Cygwin 64位工具链(Fortran)的GCC`

     

gcc-fortran GNU编译器集合(Fortran)

libgfortran的条目。

希望其中一些信息会有所帮助,或者至少具有教育意义。