日期:2014-05-16  浏览次数:20776 次

-D_FILE_OFFSET_BITS=64 的BUG有人遇到没
bug_ex.c

#include <stdlib.h>
#include <string.h>
#include <inttypes.h>
#include <stdio.h>

void bug2(void *a,void *b,uint64_t offset,uint64_t size,void *fp,int ver)
{
printf("fp:%p\n",fp);
}

bug.c

#include <stdlib.h>
#include <string.h>
#include <inttypes.h>
#include <stdio.h>

void bug1(void *a,void *b,uint64_t offset,uint64_t size,void *fp,int ver)
{
printf("fp:%p\n",fp);
}
int main()
{
void *a = malloc(1);
void *b = malloc(1);
void *fp = malloc(1);
off_t offset = 1;
size_t size = 1;

bug1(a,b,offset,size,fp,1);
bug2(a,b,offset,size,fp,1);

free(a);
free(b);
free(fp);
return 0;
}

Makefile

all:bug bug.asm
bug.asm:bug
objdump -SD bug >bug.asm
bug:bug.o bug_ex.o
gcc -g -o bug bug.o bug_ex.o
bug.o:bug.c
gcc -g -D_FILE_OFFSET_BITS=64 -c bug.c
bug_ex.o:bug_ex.c
gcc -g -D_FILE_OFFSET_BITS=64 -c bug_ex.c
clean:
rm -f bug.o bug_ex.o bug bug.asm



我在ubuntu11.10,gcc 4.6.1上make编译后执行后
./bug
fp:0x80ea028
fp:0x1
两个函数打印不同。
有人遇到过这种问题吗?
gcc

------解决方案--------------------
引用:
引用:引用:bug2函数在bug.c里没有声明就调用,这就是BUG。
确实如1楼所说,我在bug.c中加入了bug2()的声明,就不会出现地址不一致的现象。
能否请1楼解释一下原因何在?在make时不是已提供了bug2()的定义,为何还需要在bug.c中声明?

就楼主的例子说而言.
b……

犀利,,学习下。