Я работаю над проектом, используя Rust на встроенном устройстве, где я пытаюсь написать функции в Rust, которые можно вызвать из C. Я скомпилирую проект без стандартной библиотеки, более или менее следуя этому руководству: Embedded Rust Right Now!Связывание ржавчины с C: неопределенные ссылки на функции '__aeabi'
Код моей ржавчины компилируется только в файлы .o, но у меня возникают проблемы при попытке связать файлы объектов C и Rust вместе с помощью arm-none- EABI-ЛД. Я получаю несколько ошибок, подобные этим:
rustfunc.o: In function `func':
rustfunc.0.rs:(.text.hash+0x18): undefined reference to `__aeabi_memclr8'
...
/rust/src/libcore/slice.rs:1446: undefined reference to `__aeabi_memcpy'
/rust/src/libcore/fmt/num.rs:196: undefined reference to `__aeabi_memclr4'
озадачивает меня больше всего в том, что даже если я просто связывая объектные файлы вместе, ошибки ссылаются как мой Rust код и код из libcore.
Есть ли у кого-нибудь представление о том, что означают эти ошибки и почему компоновщик не может решить эти проблемы? Благодаря!
Похоже, что пропущен в ABI. Я бы проверял, совместимы они или нужны обертки. Символы sems являются некоторыми специальными версиями libmcc 'memclr' (который является специальным вариантом' memset') и 'memcpy' – Olaf
Как новичок в этом, не могли бы вы указать мне в направлении поиска этого? – Jambaman
Это зависит от настроек ОС и ЦП и компилятора. Для ARM текущий PCS - это AAPCS и спецификации ABI (бесплатная загрузка), но gcc также позволяет некоторым другим. Это справедливо для C и некоторых других языков, но не имеет понятия о Rust. – Olaf