我希望執行與GCC驅動程序(「海合會」)的連接,而不是「LD」,(這樣我就可以使link-step optimization)。與「海灣合作委員會」,而不是「LD」鏈接 - 庫的問題
「海灣合作委員會」似乎表現得很不同於「LD」不過,和不接受一些相同的命令行選項。更糟糕的是,我想我遇到了與圖書館有關的問題。使用「gcc」進行鏈接,我收到了一些「未定義的參考」錯誤。其中很多是undefined reference to 'operator new(unsigned int)'
和undefined reference to '__aeabi_unwind_cpp_pr0'
。
在我的設置,提供像new
函數庫是Newlib。我正在開發e2 Studio - Eclipse上的一個變體,專爲爲瑞薩MCU開發而開發。 e2 Studio被配置爲給我一個「預先構建」的Newlib版本,而不是每次構建時都創建Newlib。
在我的makefile,鏈接是通過「LD」完成,並正常工作:
arm-none-eabi-ld
-o "RZ_A1H_USB_Host_Func_RSK.x"
-T"E:/Renesas e2 workspace/RZ_A1H_USB_Host_Func_RSK\HardwareDebug\LinkerSubCommand.tmp"
-T"E:\Renesas e2 workspace\RZ_A1H_USB_Host_Func_RSK\compiler_specific\GNU_e2studio-IRAM.ld"
$(USER_OBJS) $(LIBS) $(LIBRARY_GENERATOR_OUTPUTTYPE_OUTPUTS)
-L"C:\PROGRA~2\KPIT\GNUARM~1.02-\ARM-NO~1\ARM-NO~1/lib/gcc/arm-none-eabi//4.9-GNUARM-NONE_v14.02/interwork" -L"C:\PROGRA~2\KPIT\GNUARM~1.02-\ARM-NO~1\ARM-NO~1/lib/gcc/arm-none-eabi/4.9-GNUARM-NONE_v14.02/interwork"
-L"C:\PROGRA~2\KPIT\GNUARM~1.02-\ARM-NO~1\ARM-NO~1/arm-none-eabi/lib/interwork"
-lm
-lstdc++
-lc
-lgcc
-estart
然而,所有我需要做的就是與arm-none-eabi-gcc
取代arm-none-eabi-ld
,並導致所描述的「未定義的引用」錯誤以上。
任何線索?我需要告訴「gcc」我不需要告訴「ld」?非常感謝您的幫助。
有些[接頭選項(https://gcc.gnu.org/onlinedocs/gcc-4.9.3/gcc/Link-Options.html#Link-Options)由GCC複製,並且對於那些AREN」你可以使用'-Wl'來指定發送給實際鏈接器的選項(參見鏈接參考的底部)。 –
啊謝謝,我想知道如何指定這些額外的選項。然而,主要的問題似乎是,簡單地將命令從「ld」更改爲「gcc」導致所有那些「未定義參考」錯誤。特別是我需要告訴gcc會有什麼額外的東西嗎? – beammy
當您與GCC鏈接,你使用'gcc'命令或'G ++'命令?因爲如果你使用'gcc'連接,那麼C++運行時將不會自動鏈接。如果你鏈接了一個C++程序,那就用'g ++'代替。 –