链接器脚本未定义对PUTS的引用

时间:2013-10-11 05:20:31

标签: c linker-errors linker-scripts

我正在尝试学习链接器脚本 这是我的文件

caller.c

extern void hello();

void main()
{
    hello();

}

helloasm.c

   #include <stdio.h>

    void hello()
    {
        printf("\nHELLO\n\n");
    }

link.lds

    SECTIONS
    {
      . = 0x10000;
      .text : { *(.text) }
      . = 0x8000000;
      .data : { *(.data) }
      .bss : { *(.bss) }
    }

compile.sh

    cc -S helloasm.c   #generate assembly file
    cc -c helloasm.s   #generate object file
    cc -c caller.c       #generate object file

    ld -o hello -T link.lds helloasm.o caller.o

当我使用

cc caller.c helloasm.c

我正在获得输出 HELLO

但是当调用sh文件时 我收到了错误 **

helloasm.o: In function `hello':
helloasm.c:(.text+0xe): undefined reference to `puts'

** 有人可以解释为什么把函数定义为未定义

GNU ld (GNU Binutils for Ubuntu) 2.23.2

gcc version 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1)

0 个答案:

没有答案