首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

arm-linux-ld 链接时怎么包含头文件

2012-03-20 
arm-linux-ld 链接时如何包含头文件?我写了两个简单的不能再简单的程序,用来测试arm-linux-gcc和arm-linux

arm-linux-ld 链接时如何包含头文件?
我写了两个简单的不能再简单的程序,用来测试arm-linux-gcc和arm-linux-ld。
工程总共有Makefile,myld.lds,main.c,app.c,和app.h 这5个文件,下面分别给出代码
makefile文件如下

C/C++ code
CC = arm-linux-gcc    LD = arm-linux-ldOBJDUMP = arm-linux-objdumpOBJCOPY = arm-linux-objcopy LDFAGS := -T myld.ldsLDFAGS += -lc -lm -lgcc_s -Bstatic     CFLAGS := -g -c -O2 -nostdlibCFLAGS += -oobjs=main.o app.oucos_ii.bin:$(objs)    $(LD) -o core.elf  $(objs) $(LDFAGS) -Map core.map     $(OBJCOPY) -O binary -S core.elf core.bin    $(OBJDUMP) -D -m arm core.elf > core.dismain.o:main.c    $(CC) $(CFLAGS) $@ $<app.o:app.c    $(CC) $(CFLAGS) $@ $<clean:    -rm -f *.o    -rm -f *.elf     -rm -f *.bin    -rm -f *.map

链接文件myld.lds为
C/C++ code
ENTRY(_start)SECTIONS{. = 0x20000040;     .text :          {     *(.text )      }      . = ALIGN(4);    .rodata : { *(.rodata) }    . = ALIGN(4);    .data : { *(.data) }    . = ALIGN(4);    .bss : { *(.bss) }}

主函数main.c
C/C++ code
#include "app.h"int main(void){    app();    return 0;}

子函数文件app.c
C/C++ code
static void *memcpy(void *dest, void *src, int count){    char *tmp = dest;    char *s = src;    while (count--)        *tmp++ = *s++;    return dest;}int app(void){    char a[4];    char str="1234";    memcpy(a,str,4);    return 0;    }

头文件app.h
C/C++ code
int app(void);


在如上设置时,使用make命令,能顺利编译出.bin等文件。因为此时没有调用库函数memcpy,而是自己写了一个子函数,单单的工程内部文件,就能够链接产生可执行文件了。
当改变app.c文件,使之使用库函数,去掉自己memcpy子函数时,
C/C++ code
#include <string.h>int app(void){    char a[4];    char str="1234";    memcpy(a,str,4);    return 0;    }

再使用make命令,就会显示编译出错。
错误信息为
arm-linux-ld: BFD 2.15 assertion fail /opt/crosstool/crosstool-0.43/build/arm-linux/gcc-3.4.5-glibc-2.3.6/binutils-2.15/bfd/elf32-arm.h:3905
make: *** [ucos_ii.bin] Segmentation fault
我觉得是由于使用了myld.lds文件,没有完全指定所使用的库文件,在link的时候,不能顺利成功。
我想请问,在这个时候,如何才能正确的包含所需的头文件呢?
注:
link文件的第一局ENTRY(__start)对编译链接没有影响。
修改app.c对编译没有影响,仅仅链接不会成功。

[解决办法]
结给我……
[解决办法]
也给点分我吧,楼上的一下子就混了5条裤衩,我都混了一年多了。。。。

话又说回来,我很少直接用ld的,直接用gcc就搞完了。
[解决办法]
-nostdlib 没去掉?

知道原因就应该分享下.

[解决办法]
链接器要什么头文件啊

热点排行