在64位Windows 7计算机上进行编译时,Flex in C会生成不受支持的16位应用程序

时间:2015-04-07 08:21:19

标签: c++ c windows flex-lexer lex

我使用的是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使用以下命令编译它时,它成功编译: flex test.l

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- bit)版本的程序,然后联系软件发行商。“

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

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

我可以请求您分享您对此问题的可能原因或任何相同/类似经历的意见,以便我可以进一步调查以找出根本原因。

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

2 个答案:

答案 0 :(得分:1)

  

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

这是你的误解。根据{{​​3}}:

  

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

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

我不完全确定您实际使用的是哪种编译器,因为您链接到的指令似乎需要gcc用于编译部分,而不是cpp

可能值得尝试找出您正在使用的模型和版本编译器,例如使用cpp --helpcpp -hcpp -? 。这样可以更轻松地跟踪为什么您获得的是16位可执行文件。

答案 1 :(得分:-1)

从gcc参数中删除“-c”。对我来说工作:D