我的设置如下:

  • 操作系统:Windows 7 Home Premium 64位
  • Eclipse:带有CDT的Helios 3.6.1 64位
    和Photran
  • Java SE运行时
    环境:1.6.0_21
  • Java热点:64位服务器VM
    (内部版本17.0-b17,混合模式)
  • Cygwin 1.7.2(32位)

  • 我最初的测试Fortran应用程序仅打印“Hello World!”。然后退出。
    尽管在Eclipse的“问题”选项卡中具有以下2条警告,但代码仍可以构建并正常运行
    Description Resource    Path    Location    Type
    Error launching external scanner info generator (gcc -E -P -v -dD C:/Users/Joe/workspace/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c)  HelloFortran    Unknown C/C++ Problem
    Error launching external scanner info generator (gcc -E -P -v -dD C:/Users/Joe/workspace/.metadata/.plugins/org.eclipse.cdt.make.core/specs.c)  HelloFortran    Unknown C/C++ Problem
    

    尝试将应用程序调试为本地Fortran应用程序时出现问题,导致此错误:
    cygwin warning:
      MS-DOS style path detected: C:\Users\Joe\workspace\HelloFortran
      Preferred POSIX equivalent is: /cygdrive/c/Users/Joe/workspace/HelloFortran
    .gdbinit: No such file or directory.
      CYGWIN environment variable option "nodosfilewarning" turns off this warning.
      Consult the user's guide for more details about POSIX paths:
        http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
    auto-solib-add on
    Undefined command: "auto-solib-add".  Try "help".
    Error: dll starting at 0x76ba0000 not found.
    Error: dll starting at 0x75230000 not found.
    Error: dll starting at 0x76ba0000 not found.
    Error: dll starting at 0x76aa0000 not found.
    [New thread 7060.0x10dc]
    [New thread 7060.0x16c0]
    

    我猜找不到入口点,因为它期望使用32位/64位DLL并获取其他类型(如果我输入错了,请更正我)。 GDB版本如下:
    GNU gdb 6.8.20080328 (cygwin-special)
    GDB configured as "i686-pc-cygwin"
    

    从命令行运行GDB可以得到:
    [New thread 5768.0x15a0]
    Error: dll starting at 0x76ba0000 not found.
    Error: dll starting at 0x75230000 not found.
    Error: dll starting at 0x76ba0000 not found.
    Error: dll starting at 0x76aa0000 not found.
    [New thread 5768.0x46c]
    hellofortran () at ../HelloFortran.f90:1
    1    program HelloFortran
    Current language: auto; currently fortran
    

    如果我正确地阅读了该应用程序的确可以在GDB中运行并且可以逐步执行它,但是丢失的DLL错误是什么呢?

    Dependency Walker为我的HelloFortran.exe提供了以下错误
    Error: Modules with different CPU types were found.
    Warning: At least one delay-load dependency module was not found.
    Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module.
    

    缺少的DLL似乎是IESHIMS.DLL(2),根据我的快速研究,这似乎不是一个大问题,但是我看不出我的应用程序需要引用此DLL的任何原因,因此我认为这不是导致GDB中的错误。

    所有模块的CPU类型均为x64,除了:
    CYGGCC_S-1.DLL
    CYGGFORTRAN-3.DLL
    CYGWIN1.DLL
    HELLOFORTRAN.EXE
    

    CPU类型为x86

    我担心缺少的DLL错误可能会损害我正确调试程序的能力(尽管该程序最终将在基于Unix的HPC上运行,所以我不应该在这里遇到这些问题,因为所有这些DLL似乎都与Cygwin)。

    我的问题:
  • 为什么我会丢失DLL错误? (是否可以切换到32位版本的Eclipse/JVM等来解决此问题?)
  • 我是
    可以继续,还是应该解决
    丢失的DLL错误(如果这样,
    如何)?

  • 编辑:我的测试程序如下:
    program HelloFortran
        ! Force variable declaration
        implicit none
    
        ! Print 'Hello World!' to the main output
        write (*,*) 'Hello World!'
    
        ! End program
    end program HelloFortran
    

    最佳答案



    当Win/x64向该过程的一部分的64位DLL发送DebugEvent到32位进程时,它必然会截断加载地址(64位加载地址不适合32位LPVOID)。最终结果是调试器看到DLL加载事件,但是在该地址找不到任何DLL。所以警告你。



    否:这是在x64上调试任何32位进程(至少使用32位调试器)的基础。我认为如果使用x64版本的GDB,您会摆脱警告,但是我不确定GDB/x64是否可以在Windows上调试32位进程(x86_64 GDB对于Linux上的i386进程没有问题,原因是“拱”支持;我不知道Windows版本中是否存在“多拱”。



    你不应该这样



    是什么让您认为它是IESHIMS.DLL

    您更有可能看到WoW64.dll和 friend 。
    在Win/x64上运行的每个32位应用程序都引用WoW64

    关于windows - 为什么在Windows 7 64位(使用Eclipse/Photran/Cygwin)上使用GDB调试Fortran代码时会丢失DLL错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3982194/

    10-09 07:34
    查看更多