Изтеглих библиотеките ELLCC (Windows, MinGW). Опитвам се да събера и свържа един много прост IR файл.
За x86_64-ellcc-windows-gnu
, тя работи добре. За armv7-ellcc-linux
(arm-linux-engeabi
) и всяка друга цел на ARM, тя хвърля грешка на линкер, подобна на тази:
"V: UsersTeoDownloadsellcc-x86_64-w64-mingw32-0.1.12bin / ecc-ld.exe "-n ostdlib "-LV: ПотребителиTeoDownloadsellcc-x86_64-w64-mingw32-0.1.12bin .. libecc / lib / arm-linux-engeabi "-m armelf_linux_eabi -build-id -hash-style = gnu- -eh-frame-hdr -o a.out -e start -Bstatic "V: ПотребителиTeoDownloadsellcc-x86 64-w64-mingw32-0.1.12bin ..libecc / lib / arm-linux-engeabi / crt1.o "" V: Потребители TeoDownloadsellcc-x86_64-w64-mingw32-0.1.12bin..libecc / ИЪ / рамо-linux- engeabi / crtbegin.o "" C: ПотребителиTeoAppDataLocalTempInt32Add-42cacb.o "- ( -lc -lcompiler-rt -) "V: ПотребителиTeoDownloadsellcc-x86_64-w64-mingw32-0.1.1 2bin..libecc / ПЬ / ръка-Linux-engeabi / crtend.o " С:. UsersTeoAppDataLocalTempInt32Add-42cacb.o :( ARM.exidx + 0x0): undefined re ference на "__aeabi_unwind_cpp_pr0"
След като прочетете друг отговор по подобен въпрос, Подозирам, че редът на свързване е погрешен и по този начин времето за изпълнение не е правилно свързано.
Но как да оправя реда за свързване - или каквото и да е всъщност проблемът -, тъй като линкерът се извиква от ecc
? Има ли причина ecc
не се грижи за това автоматично (особено след като му давам само един IR файл, който да се компилира)?
Отговори:
1 за отговор № 1За arm-linux-engeabi, символа"__aeabi_unwind_cpp_pr0" е дефиниран в libc ++. Изглежда, че трябва да добавите -lc ++ към командния ред на връзката (преди -lc) или да използвате ecc ++, а не ecc, за да свържете програмата си.
Той работи за x86_64, защото липсващата функция е специфична за ARM, разбира се.