sherf 发表于 2009-06-01 21:28

编译调试

各位,

目前在做虎书的练习,碰到一个问题,就是“整合为一体”的问题。目前,在编译好 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步到底是那里出了问题?谢谢

sherf 发表于 2009-06-01 21:30

回复 #1 sherf 的帖子

先顶一下

sherf 发表于 2009-06-01 23:54

回复 #1 sherf 的帖子

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

windaoo 发表于 2009-06-02 00:00

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

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

windaoo 发表于 2009-06-02 00:07

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

sherf 发表于 2009-06-02 00:28

回复 #4 windaoo 的帖子

windaoo,

main的 问题没有了,但还有一些问题(因为这些问题是在main错误之后的,之前估计是main错误引起,所以没列出来),现在列出来如下:


# 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'

sherf 发表于 2009-06-02 08:30

回复 #6 sherf 的帖子

windaoo,

还在吗?

cathyleung 发表于 2009-06-02 10:20

支持支持~:mrgreen:

sherf 发表于 2009-06-02 11:37

回复 #6 sherf 的帖子

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

sherf 发表于 2009-06-02 13:45

回复 #6 sherf 的帖子

runtime.c里面已包含 stdio.h,为何还找不到malloc、putchar、printf等函数?是编译汇编文件的语句有问题吗?还是ld的问题?搞不懂......
页: [1] 2
查看完整版本: 编译调试