从Knuth编译CWEB程序
我从Don 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
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
。“只是一个警告”-是的,但警告不应被忽略。