我正在構建ARM926的裸機代碼,我需要生成的輸出儘可能緊湊。對C代碼的`__aeabi_unwind_cpp_pr1'未定義引用
在我的最大努力,不過,我還是收到此錯誤:
yocto/poky/build-idprint/tmp/work/idprint-poky-linux-gnueabi/idpr/1.0-r0/
recipe-sysroot/usr/lib/libc.a(raise.o):
(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr1'
在我Makefile
我把這個連接器選項:
LD_OPT = -Wl,-gc-sections -Wl,-build-id=none -flto
LD_LINK = -static -nostartfiles -nostdlib -Wl,--start-group,-lgcc,-lc,--end-group
LDFLAGS = -T $(BINARY).ld -Xlinker -Map=$(BINARY).map $(LD_OPT)
和鏈接命令是
$(LINK.cc) $(OBJS) $(LD_LINK) src/lib_dummies.o -o $(BINARY).elf
最後,我有一個儘可能簡單的自定義鏈接腳本:
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(fiq_main)
SECTIONS
{
. = 0x0;
.text : {
KEEP(*(.textEntry));
*(.text*)
*(.text .gnu.linkonce.t.*)
}
. = ALIGN(1024);
_bss_start = .;
.data : { *(.data) }
.bss : { *(.bss) }
_bss_end = .;
}
我在我的代碼中添加了一個自定義虛擬__aeabi_unwind_cpp_pr1
(靈感來自libgcc源代碼),但它沒有幫助。
我已經閱讀了相當多的網頁,但沒有解釋爲什麼libgcc
試圖將C++
功能鏈接到我的C
-僅限於項目。 好吧,$(LINK.cc)
評估爲arm-poky-linux-gnueabi-g++
,但我仍然沒有意識到試圖鏈接C++
功能libgcc
。如果我連接libstdc++
這將是有意義的。此外,$(LD)由於其他原因而失敗(找不到-lgcc
)。
沒有優化標誌我可以找到幫助我這個。
看,我的代碼不添加任何不必要的東西是非常重要的。 一切都只是開始,因爲我需要使用整數除法(未解決__aeabi_idiv
...)
我爲了簡化省略的優化參數,但如果需要的話,請告訴我,我會添加它們。
任何幫助將不勝感激。 謝謝。