2015-10-08 73 views
0

我希望執行與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」?非常感謝您的幫助。

+1

有些[接頭選項(https://gcc.gnu.org/onlinedocs/gcc-4.9.3/gcc/Link-Options.html#Link-Options)由GCC複製,並且對於那些AREN」你可以使用'-Wl'來指定發送給實際鏈接器的選項(參見鏈接參考的底部)。 –

+0

啊謝謝,我想知道如何指定這些額外的選項。然而,主要的問題似乎是,簡單地將命令從「ld」更改爲「gcc」導致所有那些「未定義參考」錯誤。特別是我需要告訴gcc會有什麼額外的東西嗎? – beammy

+0

當您與GCC鏈接,你使用'gcc'命令或'G ++'命令?因爲如果你使用'gcc'連接,那麼C++運行時將不會自動鏈接。如果你鏈接了一個C++程序,那就用'g ++'代替。 –

回答

0

最終解決了我自己的問題。這是輸入文件被指定在一個外部文件中,該文件被該位引用:-T"E:/Renesas e2 workspace/RZ_A1H_USB_Host_Func_RSK\HardwareDebug\LinkerSubCommand.tmp"

以正常方式指定輸入文件反而解決了問題。

相關問題