GCC - ссылка не удалась - PullRequest
       35

GCC - ссылка не удалась

1 голос
/ 22 декабря 2010

и извините за мой не очень хороший английский.Я буду стараться изо всех сил:)

Я пытаюсь скомпилировать надстройку для моего графического калькулятора Casio в C. Это работает без проблем при использовании официального SDK.Поскольку он доступен только для Windows, я хочу использовать gcc.

Итак, я получил sh-rtems-gcc и его binutils из macports и попытался скомпилировать мою программу в соответствии с это инструкция .Я скопировал и вставил описанные addin.ld и crt0.s и поместил мои main.c и libfxsys.a (изте же ребята, что и инструкции, упомянутые выше) в том же каталоге.Подкаталог include содержит заголовки fxsys.Я проверил наличие всех функций библиотеки в .a файле с nm.

При использовании этой команды для компиляции:

sh-rtems-gcc-4.2.3 -m3 -mb -nostdlib -I./include -c crt0.s main.c

Все отлично работает.Но затем я пытаюсь связать:

sh-rtems-gcc-4.2.3 -m3 -mb -nostdlib -L. -o myaddin.elf -Taddin.ld crt0.o main.o -lfxsys

и получаю следующую ошибку:

main.o: In function `__main':
main.c:(.text+0x248): undefined reference to `_Bdisp_AllClr_VRAM'
...     
... (--- cut 16 other errors in the same format ---)
...
main.c:(.text+0x360): undefined reference to `_Sleep'
./libfxsys.a(locate.o): In function `_locate':
locate.c:(.text+0x28): undefined reference to `_locate_OS'
collect2: ld gab 1 als Ende-Status zurück

Все отсутствующие символы находятся в libfxsys.a .Я проверил это с помощью nm.

Я уже поиграл с позициями библиотеки в команде, поскольку это часто упоминается как источник сбоя в других сообщениях, найденных в google, но безуспешно.Я также безуспешно пытался добавить и удалить опцию - lgcc , которая используется в вышеупомянутых инструкциях.

Мой хост-компьютер - это Intel Mac, OS X 10.6

. Поскольку я понятия не имею, как решить эту проблему, и не могу скомпилировать мою программу, я должен спросить: что я делаю не так?Как я могу скомпилировать мою программу без использования SDK?

Заранее спасибо, xythobuz

Редактировать:

Я также пытался связать с:

sh-rtems-ld -EB -L. -o myaddin.elf -Taddin.ld crt0.o --start-group main.o libfxsys.a --end-group

Но он выдает тот же результат, что и выше.

1 Ответ

1 голос
/ 22 декабря 2010

Я не могу сказать точную проблему, но расследую это так:

  1. Найдите библиотеку, которая содержит пропущенные символы.Используйте nm для просмотра имен символов
  2. Как только вы узнаете, какая библиотека содержит символы, убедитесь, что вы ссылаетесь на нее, и в правильном порядке.Попробуйте использовать опции рекурсивного разрешения символов -( -) с вашим компоновщиком.
...