编译调试
各位,
目前在做虎书的练习,碰到一个问题,就是“整合为一体”的问题。目前,在编译好 tiger.s 后,执行 tiger test1.tig 后生成 tiger.asm,然后:
1) nasm -f elf -o tiger.o tiger.asm(获得tiger.o)
2) cc -c -g runtime.c(获得runtime.o)
3) ld -o tiger tiger.o runtime.o
第1、2步成功,但第3步出错,错误原因找不到 _start入口。我重新查看了源程序,并没有 _start 的定义(据我所知,_start是在汇编文件中对外部函数的调用时使用的,其中还要牵涉到一些类似global等参数)。我请教各位下,你们做虎书上的练习时,最后的编译步骤是怎样的?我上面的那3步到底是那里出了问题?谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
先顶一下
各位谁有虎书例子的 makefile 文件(包含最后的“整合成一体”)?请共享一下......
3) ld -o tiger tiger.o runtime.o
试试
ld -o tiger itger.o runtime.o --entry main
按道理应该是这样的
但我自己写了个小例子试的时候,可以生成可执行程序,但结果老是 segfault
想不出原因。。。
windaoo,
main的 问题没有了,但还有一些问题(因为这些问题是在main错误之后的,之前估计是main错误引起,所以没列出来),现在列出来如下:
[root@aa output]# ld -o tiger tiger.o runtime.o --entry main
runtime.o: In function `initArray':
/root/proj1/output/runtime.c:6: undefined reference to `malloc'
runtime.o: In function `allocRecord':
/root/proj1/output/runtime.c:14: undefined reference to `malloc'
runtime.o: In function `print':
/root/proj1/output/runtime.c:31: undefined reference to `putchar'
runtime.o: In function `flush':
/root/proj1/output/runtime.c:36: undefined reference to `stdout'
/root/proj1/output/runtime.c:36: undefined reference to `fflush'
runtime.o: In function `main':
/root/proj1/output/runtime.c:48: undefined reference to `tigermain'
runtime.o: In function `chr':
/root/proj1/output/runtime.c:60: undefined reference to `printf'
/root/proj1/output/runtime.c:60: undefined reference to `exit'
runtime.o: In function `substring':
/root/proj1/output/runtime.c:72: undefined reference to `printf'
/root/proj1/output/runtime.c:73: undefined reference to `exit'
/root/proj1/output/runtime.c:75: undefined reference to `malloc'
runtime.o: In function `concat':
/root/proj1/output/runtime.c:88: undefined reference to `malloc'
runtime.o: In function `getchar2':
/root/proj1/output/runtime.c:104: undefined reference to `stdin'
/root/proj1/output/runtime.c:104: undefined reference to `_IO_getc'
windaoo,
还在吗?
支持支持~
尝试中,还没弄清楚原因......
runtime.c里面已包含 stdio.h,为何还找不到malloc、putchar、printf等函数?是编译汇编文件的语句有问题吗?还是ld的问题?搞不懂......