【发布时间】:2015-10-31 10:28:32
【问题描述】:
我的指示是:
制作这个程序的必要步骤是:
编译cpp2html.c生成cpp2html.o。 (重要提示:本项目源代码是C,不是C++,所以必须用gcc编译链接,而不是g++。)
运行命令
flex cppscanner.l 从 cppscanner.l 中的语言描述生成文件 lex.yy.c。
编译 lex.yy.c 以生成 lex.yy.o。 (这通常会产生有关额外令牌的警告消息。忽略它。)
链接 .o 文件以生成名为 cpp2html 的可执行程序
编写一个执行这些步骤的生成文件。当更改此过程的任何输入文件时,您的 makefile 应该只产生所需的最少步骤。 (注意:你可能无法像在作业的前面部分那样将这个 makefile 基于我的自我更新的 makefile。相反,你可能会发现有必要从头开始编写这个。
这是我的生成文件:
cpp2html: cpp2html.o lex.yy.o
gcc -g -DDEBUG cpp2html.o lex.yy.o
mv a.out cpp2html
lex.yy.o: lex.yy.c
gcc -g -DDEBUG lex.yy.c
lex.yy.c:
flex cppscanner.l
cpp2html.o: cpp2html.c
gcc -g -DDEBUG cpp2html.c
我在这里做错了什么?我收到一条错误消息:
collect2:错误:ld 返回 1 个退出状态
make: *** [cpp2html.o] 错误 1您的 makefile 在调用时不会生成“cpp2html”:
gcc -g -DDEBUG cpp2html.c
这是今晚到期,所以任何建议将不胜感激。
【问题讨论】:
-
是您使用
mv而不是仅仅添加-o cpp2html的原因吗? -
您的
.c->.o规则不应该包含-c参数吗?否则(正如我相信错误所暗示的那样),他们将尝试链接完整的可执行文件,而不是仅仅编译到目标文件。例如:gcc -c -g -DDEBUG cpp2html.c -
错误信息似乎不完整。
collect2: error: ld returned 1 exit status之前有哪些行? -
这是来自CS 252 at Old Dominion University 的a coursework assignment。在阅读答案之前,请注意the Academic Honesty policy 非常清楚将他人的作品作为自己的作品提交的主题。 unix.meta.stackexchange.com/questions/4206