首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pascal到汇编编译器

Pascal到汇编编译器
EN

Stack Overflow用户
提问于 2015-06-01 13:11:09
回答 1查看 474关注 0票数 0

我正在做一个编译器项目,我已经编写了我的lexi.l和parser.y,它在我的朋友计算机上正确工作,但是我得到了以下错误:

Opcal.tab.o:文件不可识别:文件格式不可识别

collect2:错误: ld返回1退出状态

这是我的Makefile

代码语言:javascript
复制
FLEX = /usr/bin/flex
CFLAGS = -g
LDLIBS = -lfl
CC = /usr/bin/gcc
BISON = /usr/bin/bison

pascal: pascal.tab.o pascal.lex.o
        $(CC) -o pascal pascal.tab.o pascal.lex.o $(LDLIBS)
pascal.lex.o:   pascal.lex.c pascal.tab.h
        $(CC) -c pascal.lex.c 
pascal.tab.o:   pascal.tab.c pascal.tab.h
        $(CC) -c pascal.tab.c 
pascal.tab.c:   pascal.y
        $(BISON) -d pascal.y
pascal.lex.c:   pascal.l
        $(FLEX) pascal.l
        mv  lex.yy.c pascal.lex.c

clean:
        rm  pascal.tab.o pascal.lex.o pascal.tab.c pascal.lex.c \
           pascal.tab.h pascal 

我用的是Ubuntu 14.04

EN

回答 1

Stack Overflow用户

发布于 2015-06-01 15:12:11

你没有说你和你的朋友有什么样的电脑。在这种情况下,它可能是重要的信息,因为它似乎工作在一个,而不是另一个。您也没有说明在获取错误时输入了哪些命令。这可能是至关重要的得到一些帮助也!

然而,pascal.tab.o文件将由编译器(可能是gcc )创建。二进制文件不能在不同的计算机之间移植是很正常的。有时,即使您链接了*.o文件以生成可执行文件,该可执行文件也不会在另一台计算机上工作,因为它与正在使用的软件不兼容。生成此错误的程序ld是合并这些二进制文件的链接器。

我们不能指望在运行Windows的PC上构建的二进制文件可以在Mac或iPhone上使用。我们也不能期望linux编译器构建一个运行在Mac上的二进制文件。但是,构建在不同版本的windows上的二进制文件是不可互换的,来自不同类型linux的二进制文件也同样不可互换。你不会指望iPhone应用程序可以在安卓上工作吧?

您仍然应该能够传输文件lexer.lparser.y,并通过flex/bison和gcc运行它们,以便再次获得一个工作程序。

(最新情况)

现在我看到您的makefile,我猜您从您的朋友计算机复制了所有的文件,包括makefile。解决办法对你来说很容易:

代码语言:javascript
复制
make clean
make

这两个命令应该删除不兼容的二进制文件,并在您的计算机上创建新的二进制文件,您应该做得很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30574446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档