【问题标题】:Configuring LAPACK in Eclipse-Photran for fortran compiler on Windows在 Eclipse-Photran 中为 Windows 上的 fortran 编译器配置 LAPACK
【发布时间】:2012-09-28 10:00:47
【问题描述】:

更新

感谢 Vladimir 对图书馆的有用见解。我采取了另一种方法,首先在 ubuntu 中进行开发(这比使用 Eclipse/Cygwin/ 搞乱要容易得多......现在我正在尝试移植到 Windows,这还不错,但是我对此也有一些疑问,张贴在这里:Problems with porting a fortran program from ubuntu to windows

问题

我目前有以下设置,但无法配置 lapack 库以便我的 fortran 代码可以编译:

  • Windows 7
  • Cygwin 安装(用于 GNU fortran),添加到 windows PATH
  • lapack 和 liblapack-devel 与 cygwin 一起安装
    • 导致文件夹 C:/cygwin/lib 中的 liblapack.a 和 libblas.a

在我的程序中,我使用以下代码调用 lapack 库

program myProgram
    !use lapack (stays commented now)
    ...

在 Eclipse 中,我使用了以下设置(使用 Photran 包):

  • Fortran 项目:Windows 上的可执行 GNU fortran(GCC 工具链)
  • GNU fortran 编译器:gfortran ${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}
  • GNU fortran 链接器:gfortran ${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}

我编译了 libblas.a 和 liblapack.a 库,用作 Windows 的静态库,它们位于 C:/cygwin/lib 文件夹中。在 GNU fortran 链接器属性中,库在文件夹 C:/cygwin/lib 中被称为 lapackblas。这会导致编译器和链接器的{$COMMAND} 部分中出现-L"C:/cygwin/lib" -llapack -lblas 部分。 (感谢@vladimir-f 的帮助)

在输出中不再留下任何错误消息。只有我现在在 Eclipse 中得到以下错误,并且没有最终的 .exe 或 bins:

Errors occured during the build.
    Errors running builder 'CDT Builder' on project 'Hamfem'
    Internal error building project Hamfem configuration
    Release
    java.lang.NullPointerException
Internal error building project Hamfem configuration
Release
java.lang.NullPointerException

但是,构建的结果仍然是一个可执行文件,在本例中称为 Hamfem.exe。运行此文件会导致错误消息(而不是例程):The program can't start because cyglapack-0.dll is missing from your computer. Try reinstalling the program to fix this problem.

该文件当前位于C:/cygwin/lib/lapack/,但我希望运行该程序不需要该文件,因此我可以在不同的计算机上运行它。有人可以合作吗?

其次,在.exe所在的文件夹中复制粘贴.dll文件时,它会运行一秒钟,生成一个stackdump文件。由于“构建工作区”错误,我无法在 Eclipse-Photran 中使用调试器。当我想在 Eclipse 中将它作为本地 Fortran 程序运行时,Eclipse 会给出消息Binary not found。任何想法如何解决这个问题?

【问题讨论】:

    标签: eclipse fortran lapack photran


    【解决方案1】:

    问题来了

    L/lib/lapack –llapack
    

    尝试改变它

    -L/lib/lapack –llapack
    

    可能在你身上Makefile

    gfortran -funderscoring -O3 -Wall -c -fmessage-length=0 -L/lib/lapack -llapack -o 
    

    并确保 lapack.mod 确实在 /lib/lapack 中,这可能是 Cygwin 上的 C:\cygwin\lib\lapack

    【讨论】:

    • 感谢您的快速回答。我确实通过更改设置解决了第一个问题。 Eclipse 会根据项目首选项自动生成自己的 makefile。所以我不能改变太多除了构建命令。还有一个问题:我没有 lapack.mod 文件,只有库文件 (liblapack.a)。
    • 如果你没有mod文件,你肯定做不到use lapack。您必须像在 Fortran 77 中那样直接调用子例程,或者自己制作一个接口块。
    • 或者在这里下载并构建Fortran 95接口netlib.org/lapack95
    • 谢谢你的提示,那是怎么做的,直接打电话给他们?因为当我只在我的代码中使用CALL DPBTRF(..) 时,我收到以下消息:/cygdrive/c/Users/thys/../../../../../Debug/Mainprog.f90:574: undefined reference to _dpbtrs_'`
    • 您也可以尝试从您的选项中删除-funderscoring,但据我所知,这应该不是问题,它是默认选项。我更担心你的编译命令gfortran -L"C:\cygwin\lib" -o "HAMFEM-GNUfortran" ./FEM_shape_functions.o ./HAM_boundary_conditions.o ./HAM_material_library.o ./HAM_thermodynamics_library.o ./Hamfem.o ./Mainprog.o ./maths.o -l"C:/cygwin/lib/libblas.a" - l"C:/cygwin/lib/liblapack.a" 我希望-L"C:/cygwin/lib" -llapack -lblas 请检查你的 liblapack.a 是否在这个目录中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多