我正在使用64位Windows 7操作系统。我已经按照以下说明从Sourceforge安装了32位Flex和Bison:
http://www.surajgaikwad.com/2013/10/compile-lex-and-yacc-progs-on-windows.html

唯一的区别是我没有使用dev-cpp,但是我正在使用mingw cpp,因为dev-cpp给了我一个错误。

现在,我编写了一个词法分析器,并执行以下命令:

a)当我使用以下命令使用flex对其进行编译时,它将成功编译:
弹性测试

b)当我使用以下命令编译由步骤(a)生成的lex.yy.c文件时,它也会执行OK:
cpp lex.yy.c

c)但是,当我尝试使用以下命令将此输出发送到可执行文件时:
cpp lex.yy.c -o a.exe

此a.exe无法运行,并给我一个错误,指出:
“此E:... \ src \ a.exe版本与您正在运行的Windows版本不兼容。请检查计算机的系统信息,以了解您是否需要x86(32位)或x64(64-位)版本的程序,然后与软件发行商联系。”

弹出窗口的标题为“不受支持的16位应用程序”

我的印象是64位窗口应该能够执行任何32位或16位应用程序。此外,令我感到困惑的是,为什么编译器会生成16位应用程序。

我想请您分享您对此问题的可能原因或任何相同/相似的经验的看法,以便我进一步调查以找出根本原因。

任何帮助,将不胜感激。谢谢!

最佳答案

我的印象是64位窗口应该能够执行任何32位或16位应用程序。


那是您的误解。根据KB896458


  Windows的64位版本不支持16位组件,16位进程或16位应用程序。


您的cpp编译器显然正在生成一个16位应用程序,而该64位Windows将无法运行。

我不能完全确定您实际使用的是哪个编译器,因为您链接到的说明似乎要求gcc用于编译部分,而不是cpp

也许应该弄清楚您正在使用哪种模型和版本编译器,例如cpp --helpcpp -hcpp -?。这样可以更轻松地找到为什么要获得16位可执行文件。

关于c++ - 在64位Windows 7计算机上编译时,C语言中的Flex会生成不受支持的16位应用程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29486997/

10-11 23:15