编译调试

发布于 2022-09-18 17:34:54 字数 432 浏览 20 评论 0

各位,

目前在做虎书的练习,碰到一个问题,就是“整合为一体”的问题。目前,在编译好 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

甜`诱少女 2022-09-25 17:34:54

先顶一下

野鹿林 2022-09-25 17:34:54

各位谁有虎书例子的 makefile 文件(包含最后的“整合成一体”)?请共享一下......

对风讲故事 2022-09-25 17:34:54

3) ld -o tiger tiger.o runtime.o

试试
ld -o tiger itger.o runtime.o --entry main

惯饮孤独 2022-09-25 17:34:54

按道理应该是这样的
但我自己写了个小例子试的时候,可以生成可执行程序,但结果老是 segfault
想不出原因。。。

心碎的声音 2022-09-25 17:34:54

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'

她比我温柔 2022-09-25 17:34:54

windaoo,

还在吗?

沫尐诺 2022-09-25 17:34:54

支持支持~

○闲身 2022-09-25 17:34:54

尝试中,还没弄清楚原因......

糖粟与秋泊 2022-09-25 17:34:54

runtime.c里面已包含 stdio.h,为何还找不到malloc、putchar、printf等函数?是编译汇编文件的语句有问题吗?还是ld的问题?搞不懂......

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文