2016-02-12 145 views
0

我想用cygwin中的嵌入arm gcc編譯器編譯一個SDK。這是一個基於makefile的SDK。我的目標是皮層m3設備。我的問題是,SDK有一個針對目標的自定義libc實現,當我使用arm編譯器(arm-none-eabi-gcc)進行編譯時,它看起來會獲取gnu arm libc,而不是SDK libc。這導致編譯錯誤。我肯定makefile是正確的(我從一臺電腦上覆制並粘貼了整個SDK)。我無法再訪問該計算機來嘗試驗證/比較設置。我不知道如何防止arm gcc編譯器尋找自己的libc實現,而是將其指向正確的實現。任何幫助是極大的讚賞。arm gcc默認編譯它的libc

+0

也許你的SDK在某個地方設置了一個腳本,它將所有環境變量設置爲與gcc交叉編譯器一起使用。一些你必須使用'source setup environment'啓動的東西。這將設置工具鏈參數,sysroot等... – LPs

回答

0

也許有兩種解決方案:

  1. 創建特定於工具的環境 - GNU工具鏈採用了一些環境變量的定義默認行爲。對於自定義工具鏈,您需要設置所有必要的變量來覆蓋系統默認值。
  2. 使用-nostdlib鏈接選項,並明確地將所需的庫和C運行時啓動代碼,讓你的鏈接器命令行可能包括以下內容:

    -nostdlib -L在/ usr/myarmtools/GCC/lib目錄 - LC的crt0.o

注意-nostdlib抑制的libc中的libstdC++和crt0.o中默認的鏈接,所以你必須向圖書館提供搜索路徑(-L),或明確它們的完整路徑和文件將它們鏈接名稱並鏈接您的目標的C運行時目標代碼。

我使用選項2的偏好,因爲它可以在任何環境中工作。但是,如果您希望使用通用makefile來構建多個目標,則選項1可能會有用。