2012-02-22 154 views
1

我試圖編譯使用Codebench完成G ++精簡版工具的STM32芯片的一些代碼。但是,它會產生一個錯誤。未定義參考__libc_init_array

startup.o: In function `LoopFillZerobss': 
(.text.Reset_Handler+0x2a): undefined reference to `__libc_init_array' 

我用Google搜索,看來,libc_init_array可能是一些標準GCC庫的一部分......但我不知道如何解決這個問題?

我也有錯誤,比如這個

arm-none-eabi-ld: cannot find libc.a 

,類似的還有libgcc.a的和libm.a

+0

檢查你的編譯安裝,還加上「-v」選項,以檢查它的庫路徑,確保有需要的庫文件。 – 2012-02-23 03:10:16

回答

1

功能__libc_init_array是CodeSourcery的「CS3」機制一部分「啓動」代碼確保全部項目執行main之前的靜態初始化發生的。

開始通過確保所有庫中找到。這可能足以解決您的所有問題。

一種方法是使用arm-none-eabi-g ++,而不是直接使用arm-none-eabi-ld進行鏈接,因爲g ++應該正確地將一些重要參數傳遞給arm-none-eabi-ld。在某些情況下,這可能是所有需要找到並鏈接正確的庫。

如果你不知道如何建立在命令行上,或臂無 - EABI-G ++是不是盡一切努力解決缺少的庫,去看看LeafLabs網站,在那裏展示如何使用Makefile文件 http://leaflabs.com/docs/unix-toolchain.html

他們提供了一個免費,開源,IDE爲STM32,適用於Windows,Linux和Mac,包括對每個平臺工作基於GCC工具鏈構建的命令行編譯和足夠的圖書館上手http://leaflabs.com/docs/maple-ide-install.html

即使您更願意使用您的工具鏈進行實際構建,也可以使用他們的工具鏈Makefiles,爲了理智檢查你正在用來建立你的程序的過程。

我不是LeafLabs工作人員中的一員,並與該公司沒有關係,除了我已經買了一些自己的產品,並嘗試回答他們的論壇提問。