LINUX.ORG.RU

Научите линковаться с chibios

 , ,


0

1

Немного освоился с чибиосью, всё приколько, только она на мейкфайлах вся а я хочу как белый человек из qt creator'а прогать. Сделал себе qbs'ник и вроде всё билдится, но после загрузки на платку не работает.

Выяснил интересную особенность, если я собираю все объектники в один каталог то всё работает, а если ту же самую команду для линкера запускаю с путями по которым qbs сам объектники рассовывает (типа ./многобакаф/объектник.о ./другиемногобукаф/другойобъектник.о и т.д.) то оно линкуется, загружается на платку и не работает. При чём даже elf по размеру значительно отличается.

Собственно что это за фигня и как с ней бороться?

Апдейт: злобный флаг -flto превращает билд в тыкву если не передать первыми стартап-файлы. Кстати -fPIC так же всё портит.

★★★★★

Последнее исправление: ya-betmen (всего исправлений: 3)
Ответ на: комментарий от BceM_IIpuBeT

Ну ок, после работы сделаю минимальный пример. Хотя неужели есть разница?

ya-betmen ★★★★★
() автор топика
Последнее исправление: ya-betmen (всего исправлений: 1)

cast KivApple может ты подскажешь куда копать? Для меня как-то дико что линкеру не пофиг на расположение файликов.

ya-betmen ★★★★★
() автор топика
Ответ на: комментарий от ya-betmen

Могу предположить, что линкеру на вход подаются не все объектные файлы, однако ошибки линковки не происходит из-за weak-символов (например, в embedded часто все обработчики прерываний так описаны как пустые функции, а в других файлах по мере необходимости переопределяются нормальными символами). Также ничто не зависит от startup-файла (ассемблерный код, который инициализирует стек и прыгает на main) и если он потеряется при линкровке, то тоже ошибок не будет.

Больше не подскажу, с ChibiOS всегда пользовался искоробочными Makefile. Кстати, у Qt Creator есть поддержка таких проектов. Надо просто как-то сдампить список исходных файлов и флагов компиляции в файлы со специальными именами в корне проекта (я для этого добавлял новые цели в Makefile) и IDE их подхватит.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от KivApple

Я нашел ответ в чем разница - порядок файлов при линковке. Но я так и не понял почему это может быть важно.

ya-betmen ★★★★★
() автор топика
Ответ на: комментарий от ya-betmen

В embdedded первый файл должен быть специальный startup-файл, поскольку микроконтроллер ничего не знает про форматы исполняемых файлов и начинает выполнение кода с первой инструкции прошивки. Таким образом если подложить первым файлом не то, что нужно, то результат может получиться не очень.

Плюс опять же, повторюсь, weak символы могут по-разному разрешаться в зависимости от порядка линковки.

KivApple ★★★★★
()

Не используешь link-time optimization, случайно? В GCC был баг из-за которого при включенном LTO startup-файл нужно передавать компоновщику до файлов с обработчиками прерываний.

DuMOHsmol
()
Ответ на: комментарий от DuMOHsmol

Ааа ты гений, выпилил -flto и оно заработало!

ya-betmen ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.