2012-01-21 79 views
4

我開發了一個用C語言編寫的ARM7嵌入式系統的應用程序。現在我想編譯它並將其與C++鏈接以便使用一些C++功能。爲此,我使用mipsel-elf-g++而不是mipsel-elf-gcc。我可以編譯我的代碼以mipsel-elf-g++成功,但在交聯工序我得到的錯誤:對'kill'的未定義引用

/opt/mipsel/lib/gcc/mipsel-elf/3.4.6/../../../ ../mipsel-elf/lib/libc.a(lib_a-abort.o):功能```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):在功能```_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'錯誤的未定義引用仍然存在。

我該怎麼做才能解決這個問題?

回答

2

嘗試在extern "C" { … }中包裝kill函數。而且,爲了清楚起見,我建議不要使用_DEFUN宏。

+0

謝謝你的迴應。我使用你的建議,並可以鏈接我的對象文件。我現在有一個新問題,當我使用'new'運算符或'malloc'函數時,我得到''Segment Fault''信息。你有什麼主意嗎? –

+1

@MirMiladHosseiny你可能想問這是一個新問題。 –

+0

@Mir:值得問一個新問題,但可能是'_sbrk'的一個錯誤實現 – Clifford

0

我不知道,但第一件事,我看到的是,該參數「殺」沒有類型...

但我曾經得到了鏈接錯誤的唯一不確定的引用錯誤.. 。有沒有你忘記鏈接的圖書館?

+0

'kill'是宏'_DEFUN'的一個參數,大概它定義了一個名爲'kill'的函數,其參數爲int pid和int sig。爲什麼使用宏,我不知道。 – Arkku

+0

@Arkku:我認爲直接使用宏或者定義函數並不重要,最後這個宏轉換爲: int kill(int pid,int sig) –

+0

@ userrr3:kill是一個帶有int kill的函數(int pid,int sig)'聲明。 –