从Knuth编译CWEB程序

从Knuth编译CWEB程序,c,C,我从Don Knuth下载了一个CWEB程序-特别是 . 我将sliding.w转换为sliding.c。 现在,我尝试使用以下方法编译它: gcc滑动 但我得到: ./sliding.w:116:1: warning: return type defaults to ‘int’ [-Wimplicit-int] main(int argc, char *argv[]) ^ /tmp/cc9NVnXq.o: In function `main': sliding.c:(.text+0x200

我从Don Knuth下载了一个CWEB程序-特别是 . 我将
sliding.w
转换为
sliding.c
。 现在,我尝试使用以下方法编译它:

gcc滑动

但我得到:

./sliding.w:116:1: warning: return type defaults to ‘int’ [-Wimplicit-int]
 main(int argc, char *argv[])
 ^
/tmp/cc9NVnXq.o: In function `main':
sliding.c:(.text+0x2006): undefined reference to `gb_init_rand'
sliding.c:(.text+0x201c): undefined reference to `gb_fptr'
sliding.c:(.text+0x202b): undefined reference to `gb_fptr'
sliding.c:(.text+0x2036): undefined reference to `gb_fptr'
sliding.c:(.text+0x2047): undefined reference to `gb_flip_cycle'
collect2: error: ld returned 1 exit status

有人能帮我吗?

第一个问题只是一个警告。致命错误是您缺少
gb
符号,这些符号定义如下:

因此,首先需要将gb_flip.w编译成一个.c文件,然后将两个.c文件一起编译,如下所示:

gcc sliding.c gb_flip.c -o sliding

您需要链接gb_flip.h对应的任何内容。编译器警告意味着生成的代码用于C90,而不是C99或C11(但您的C编译器-GCC-默认为C11模式,因此需要警告)。
main()
的返回类型是
int
,但自C99以来,您需要声明同样多的内容。查看
slideing.w
文件;那里的代码是否没有
int
?如果是这样,请修复它。如果没有,您必须找出
main()
的定义来自何处。(但是,快速查看一下滑动.w显示它省略了
main()
-它需要为现代C更新的
int
。“只是一个警告”-是的,但警告不应被忽略。