компоновщик игнорирует библиотечные ссылки - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть простой скрипт компоновщика, который связывает процессор armv7. У меня еще не было необходимости в lib c, поэтому он не был действительно связан. Но теперь, когда я попытался скомпилировать некоторые C источники, я натолкнулся на неопределенные ссылки на memset, который должен быть в lib c .a, что поставляется с компилятором.

Так что я сделал ld -Llib -lc (я переместил lib c в папку lib проекта). и он все еще дал мне неопределенную ссылку на memset.

Далее я прямо указал, что использовать lib c .a при связывании с INPUT (lib c .a), и все же я получаю неопределенную ссылку.

И, наконец, сработало ld $(objects) lib/libc.a, и это без проблем. я посмотрел на разборку и все нормально, он использует memset.

Может кто-нибудь объяснить мне, что здесь происходит, я все еще новичок во всем этом :)

1 Ответ

0 голосов
/ 16 февраля 2020

Я нашел решение и был бы интересен всем новичкам в программировании на armv7.

Прежде всего, даже если он нормально связывается, вы попадете в обработчик HardFault, поскольку ld будет использовать libg cc, который не был создан для большого пальца.

Решение: вместо компоновщика (ld) используйте g cc, например

arm-none-eabi-gcc -T linker.ld -O1 -nostartfiles -mthumb -o bin/prog.elf src/obj/boot.o src/obj/stm32f746_startup.o

Очень важно здесь -mthumb, поэтому ваш компоновщик подхватывает правильный libc / libg cc, или скомпилируйте вашу собственную lib c большим пальцем и свяжите ее с ld.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...