未定义的引用`kill'

时间:2012-01-21 11:40:42

标签: c++ c embedded arm linker-errors

我在C中开发了一个ARM7嵌入式系统的应用程序。现在我想用C ++编译和链接它,以便使用一些C ++特性。为此,我使用mipsel-elf-g++代替mipsel-elf-gcc。我可以使用mipsel-elf-g++成功编译我的代码,但在链接步骤中我得到错误:

  

/opt/mipsel/lib/gcc/mipsel-elf/3.4.6 /../../../../ mipsel-elf / lib / libc.a(lib_a-abort.o):In函数```abort': /cygdrive/d/Files/cross/mips/newlib-1.15.0/newlib/libc/stdlib/abort.c:63: undefined reference to _ exit'`

     

/opt/mipsel/lib/gcc/mipsel-elf/3.4.6 /../../../../ mipsel-elf / lib / libc.a(lib_a-signalr.o):In函数```_kill_r': /cygdrive/d/Files/cross/mips/newlib-1.15.0/newlib/libc/reent/signalr.c:61: undefined reference to kill'`

     

collect2:ld返回1退出状态

我搜索了这个问题并发现我应该实现自己的_exitkill函数,所以我将这些代码添加到我的项目中:

void _exit(int code)
{
    while(1);

}

int _DEFUN (kill, (pid, sig), int pid _AND int sig)
{
    if(pid == __MYPID)
        _exit(sig);

    return 0;
}

通过添加这两个函数,修复了对`_exit'错误的未定义引用,但仍然存在对``kill'错误的未定义引用。

我该怎么做才能解决这个问题?

3 个答案:

答案 0 :(得分:2)

尝试在kill中包装extern "C" { … }功能。而且,为清楚起见,我建议不要使用_DEFUN宏。

答案 1 :(得分:0)

我不确定,但我看到的第一件事是,参数“kill”没有类型......

但我遇到的唯一未定义的引用错误是链接错误...所以你忘了链接到哪个库?

答案 2 :(得分:0)

我知道这是一个老问题,但是我遇到了同样的问题并找到了解决方案。将这些选项添加到链接器:

-specs=nano.specs -specs=nosys.specs -lnosys