2016-02-14 37 views
1

我想用arm-none-eabi-g ++編譯Jasmine OpenSSD代碼。 然而,第一失敗,出現以下錯誤消息G ++ ARM交叉編譯:未定義的引用

/usr/lib/gcc/arm-none-eabi/4.8.2/../../../arm-none-eabi/bin/ld: cannot find -lstdc++ 

爲了解決這個問題,我確保與的libstdC++連接。一個是可能的。一旦我固定的,它失敗,出現以下錯誤:

/usr/lib/gcc/arm-none-eabi/4.8.2//libgcc.a(unwind-arm.o): In function `get_eit_entry': 
/build/buildd/gcc-arm-none-eabi-6/build/arm-none-eabi/libgcc/../../../gcc-4.8.2/libgcc/unwind-arm-common.inc:221: undefined reference to `__exidx_end' 
/build/buildd/gcc-arm-none-eabi-6/build/arm-none-eabi/libgcc/../../../gcc-4.8.2/libgcc/unwind-arm-common.inc:221: undefined reference to `__exidx_start' 
/usr/lib/gcc/arm-none-eabi/4.8.2/../../../arm-none-eabi/lib/libc.a(lib_a-abort.o): In function `abort': 
/build/buildd/newlib-2.1.0/build/arm-none-eabi/newlib/libc/stdlib/../../../../../newlib/libc/stdlib/abort.c:63: undefined reference to `_exit' 
/usr/lib/gcc/arm-none-eabi/4.8.2/../../../arm-none-eabi/lib/libc.a(lib_a-signalr.o): In function `_kill_r': 
/build/buildd/newlib-2.1.0/build/arm-none-eabi/newlib/libc/reent/../../../../../newlib/libc/reent/signalr.c:61: undefined reference to `_kill' 
/usr/lib/gcc/arm-none-eabi/4.8.2/../../../arm-none-eabi/lib/libc.a(lib_a-signalr.o): In function `_getpid_r': 
/build/buildd/newlib-2.1.0/build/arm-none-eabi/newlib/libc/reent/../../../../../newlib/libc/reent/signalr.c:96: undefined reference to `_getpid' 
/usr/lib/gcc/arm-none-eabi/4.8.2/../../../arm-none-eabi/lib/libc.a(lib_a-sbrkr.o): In function `_sbrk_r': 
/build/buildd/newlib-2.1.0/build/arm-none-eabi/newlib/libc/reent/../../../../../newlib/libc/reent/sbrkr.c:58: undefined reference to `_sbrk' 
collect2: error: ld returned 1 exit status 
make: *** [firmware.elf] Error 1 

這裏是它失敗的實際步驟:

arm-none-eabi-g++ -static -nostartfiles -ffreestanding -T ld_script -Wl,-O1,-Map=list.txt ftl.o sata_identify.o sata_cmd.o sata_isr.o sata_main.o sata_table.o initialize.o mem_util.o flash.o flash_wrapper.o misc.o uart.o init.o -o firmware.elf -L"/usr/lib/gcc/arm-none-eabi/4.8.2/" -lgcc 

有人能提出一個解決?此外,如果我使用arm-none-eabi-gcc而不是arm-none-eabi-g ++,則此功能非常完美。

+1

粗略猜測'-fno-exceptions'? –

+0

謝謝@MatsPetersson!這確實抑制了這些錯誤!非常感謝。 '-fno-exceptions'有什麼作用?我在網上找不到任何東西。 –

+0

看到我的答案.. –

回答

1

您的問題是由編譯器生成的依賴運行時組件的異常處理代碼導致的 - 那些不在你的構建中。

-fno-exceptions關閉編譯器代碼生成中的異常處理。

+0

謝謝Mats!此外,這會有運行時的副作用嗎?我打算在ARM7TDMI控制器上運行代碼。 –

+1

不要試圖拋出異常 - 不好的事情會發生,我不確定是什麼(但希望所有的代碼都是用這個標記編譯的,我敢肯定它會給出一個錯誤,如果你嘗試的話) –