毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> linux >> 正文

arm-linux-ld链接时如何包含头文件

更新时间:2012-10-7:  来源:毕业论文

我写了两个简单的不能再简单的程序,用来测试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-ld
OBJDUMP = arm-linux-objdump
OBJCOPY = arm-linux-objcopy
LDFAGS := -T myld.lds
LDFAGS += -lc -lm -lgcc_s -Bstatic    
CFLAGS := -g -c -O2 -nostdlib
CFLAGS += -o
objs=main.o app.o
ucos_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.dis
main.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对编译没有影响,仅仅链接不会成功。

-nostdlib 没去掉?知道原因就应该分享下.

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。