ECC выдает ошибку компоновщика
Я скачал двоичные файлы ELLCC (Windows, MinGW). Я пытаюсь собрать и связать один очень простой файл IR.
За x86_64-ellcc-windows-gnu
работает нормально. За armv7-ellcc-linux
(arm-linux-engeabi
) и любую другую цель ARM, она выдает ошибку компоновщика, подобную этой:
"V: \ Users \ Teo \ Downloads \ ellcc-x86_64-w64-mingw32-0.1.12 \ bin / ecc-ld.exe" -n ostdlib "-LV: \ Users \ Teo \ Downloads \ ellcc-x86_64-w64- mingw32-0.1.12 \ bin \.. \ libecc / lib / arm-linux-engeabi "-m armelf_linux_eabi --build-id --hash-style = gnu - -eh-frame-hdr -o a.out -e start -Bstatic "V: \ Users \ Teo \ Downloads \ ellcc-x86 64-w64-mingw32-0.1.12 \ bin \.. \ libecc / lib / arm-linux-engeabi / crt1.o" "V: \ Users \ \ Teo \ Downloads \ ellcc-x86_64-w64-mingw32-0.1.12 \ bin \.. \ libecc / lib / arm-linux- engeabi / crtbegin.o "" C: \ Users \ Teo \ AppData \ Local \ Temp \ Int32Add-42cacb.o "- (-lc -lcompiler-rt -)" V: \ Users \ Teo \ Downloads \ ellcc-x86_64-w64-mingw32-0.1.1 2 \ bin \.. \ libecc / lib / arm -linux-engeabi / crtend.o "C: \ Users \ Teo \ AppData \ Local \ Temp \ Int32Add-42cacb.o:(. ARM.exidx + 0x0): неопределенная ссылка на`__aeabi_unwind_cpp_pr0'
Прочитав другой ответ по аналогичной проблеме, я подозреваю, что порядок связывания неправильный и, следовательно, среда выполнения не связана правильно.
Но как бы я исправил порядок связывания - или какова бы ни была проблема на самом деле - так как компоновщик вызывается ecc
? Есть ли причина, почему ecc
не позаботится об этом автоматически (тем более что для компиляции я даю только один файл IR)?
1 ответ
Для arm-linux-engeabi символ "__aeabi_unwind_cpp_pr0" определен в libC++. A. Похоже, вам нужно добавить -lC++ в командную строку ссылки (перед -lc) или использовать ecC++ вместо ecc для связи вашей программы.
Это работает для x86_64, потому что отсутствующая функция, конечно, специфична для ARM.