2011-04-23 66 views
10

我遇到了_sbrk問題。在編譯的鏈接階段,我使用下面的命令來鏈接我的對象,並且我得到了_sbrk的未定義引用。未定義的對_sbrk的引用

arm-none-eabi-ld -static -T linkerscript.ld -o exe timer_example.o /home/ziga/projects/cs_lite/arm-none-eabi/lib/libc.a /home/ziga/projects/cs_lite/lib/gcc/arm-none-eabi/4.5.1/libgcc.a 

我編譯爲ARM926EJ-S和ARM模式,所以我想我已經選擇了它位於文件夾主頁/ ziga /項目/ cs_lite/ARM正確的multilib(文件libc.a和libgcc.a中) -none-EABI/LIB /。

我一直在尋找_sbrk函數的互聯網,它是某種內存管理調用,它不包含在標準C庫中,因爲它依賴於微處理器。我是否必須自己寫_sbrk函數?我該怎麼做?你有任何arm926ej-s的例子嗎?在編寫這個函數後,我打算將它編譯成一個目標文件,並將它與其他對象,庫鏈接起來。

與善良的問候,Ziga。


我解決了這個問題,並且將在這裏發佈的解決方案,所以我回饋 comunity。函數_sbrk位於ARM的恩智浦CDL包內。包裝 可供下載(鏈接是所有誰不知道這已經)在這裏: http://www.lpclinux.com/Downloads/WebHome 在子文件夾CDL_v005 /電信運營商/ lpc313x /的BSP/ea3131 /來源,你會發現源文件 名爲libnosys_gnu.c應加入該項目並編譯爲對象 文件,之後鏈接到可執行文件以及其他對象和 庫。

祝願和許多成功。

+7

你實際上應該把這個答案放在_answer_中,而不是編輯你的問題。回答自己的問題很好(甚至接受它)。 – paxdiablo 2011-04-23 23:26:10

回答

3

這有助於:

-mcpu =的Cortex-M4 -mthumb -specs = nano.specs -specs = nosys。規格-mfpu = fpv4-SP-D16 -mfloat-ABI =硬

重要開關 「似乎」 是:

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

3

該問題與_sbrk本身幾乎沒有關係,而是您試圖直接調用鏈接器,繞過編譯器驅動程序。相反,使用gcc命令來調用鏈接器和-Wl,-linkeroptionhere語法來將其他選項傳遞給鏈接器。

一個可能的解決方案,如果您必須自己調用鏈接器。請嘗試在命令行結尾再次重複執行libc.alibgcc.a。還有一些「作爲組」鏈接器選項,你可以用來實現這一點,但我不知道它馬上。

+0

我解決了我的問題看看編輯後。 – 71GA 2011-04-23 19:40:24

2

最近我也遇到了這個(再次)。爲我工作的最簡單的解決方案是提供/重定向「malloc」和「免費」apis到從我正在建立我的應用程序的SDK可用的。

基本上這是因爲mem管理apis在鏈接時丟失。就像上面的回答提到它不是_sbrk在這裏特別缺失。 brk/sbrk系統調用通常用於堆管理。因此,當涉及到mem管理apis時,_sbrk缺失鏈接。

我注意到添加-lnosys(即libnosys.a)也有助於在某些集成中達到某種程度。