我在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退出状态
我搜索了这个问题并发现我应该实现自己的_exit
和kill
函数,所以我将这些代码添加到我的项目中:
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'错误的未定义引用。
我该怎么做才能解决这个问题?
答案 0 :(得分:2)
尝试在kill
中包装extern "C" { … }
功能。而且,为清楚起见,我建议不要使用_DEFUN
宏。
答案 1 :(得分:0)
我不确定,但我看到的第一件事是,参数“kill”没有类型......
但我遇到的唯一未定义的引用错误是链接错误...所以你忘了链接到哪个库?
答案 2 :(得分:0)
我知道这是一个老问题,但是我遇到了同样的问题并找到了解决方案。将这些选项添加到链接器:
-specs=nano.specs -specs=nosys.specs -lnosys