Сложность использования стандартных библиотек C в инструменте SoCLib

Я студент-электронщик из Бразилии, и в настоящее время я работаю со встроенными системами.

Я пытаюсь портировать MP3-декодер (написанный на C), называемый minimp3, на платформу, созданную с помощью инструмента SoCLib (этот инструмент имеет множество аппаратных моделей, таких как процессоры, память и взаимосвязи, все написано в SystemC witch). позволяет строить модели встраиваемых систем).

Платформа, которую я создаю, состоит из процессора MIPS, ОЗУ, межсоединения и TTY (виртуального терминала), поэтому, очевидно, MP3-декодер должен быть скомпилирован.

Этот MP3-декодер использует некоторые стандартные библиотеки C, которые не созданы в инструменте SoCLib (ведь он содержит только stdio.h и stdlib.h).

Сначала я попытался запустить мою платформу, не внося никаких изменений в make-файлы, предоставляемые инструментом SoCLib. При этом, когда я ввел команду "make", я получил следующие сообщения (среди прочих того же типа):

undefined reference to `tan'

undefined reference to `sin'

undefined reference to `cos'

undefined reference to `memset'

undefined reference to `realloc'

undefined reference to `open'

undefined reference to `strlen'

Исследуя эти ошибки, я обнаружил, что это может быть потому, что компоновщик не связывал заголовки C, поэтому я добавил следующие команды (подчеркнуто) в make-файл:

CFLAGS=-Wall -O2 -I. $(ADD_CFLAGS) $(DEBUG_CFLAGS) $($(ARCH)_CFLAGS) -ggdb -I$(COMMON) **-I/usr/include** $(INTERFACE_CFLAGS) 

mipsel-unknown-elf-ld -q $($(ARCH)_LDFLAGS) $(ADD_LDFLAGS) -o $@ $(filter %.o,$^) **-lm** -T $(filter %ldscript,$^) $(LIBGCC)*

Однако, введя команду "make" снова, я получил следующую ошибку:

mipsel-unknown-elf-ld: cannot find -lm

И теперь я не знаю, что делать.

Может кто-нибудь мне помочь?

1 ответ

Решение

Когда вы ввели команду "make", вы получили следующую ошибку:

mipsel-unknown-elf-ld: не могу найти -lm

"Mipsel-unknown-elf-" говорит, что вы используете кросс-компилятор mips, и ставит префикс команды "ld" linker-loader. Опция -lm говорит, что связывает (часть "-l") библиотеку "m", которая называется "libm.a" или "libm.so". Это означает, что make скомпилировал ваш код, и теперь пытается связать ваш объектный файл с библиотекой "libm".

Смотрите эту ссылку для получения дополнительной информации,

Как компилятор C находит, что -lm указывает на файл libm.a?

Что вы хотите сделать сейчас, так это сообщить своему компоновщику-загрузчику, какой путь (ы) искать в ваших библиотеках, что означает, что вам нужно найти "libm.a" и / или "libm.so", а также другие библиотеки, которые вы планируете использовать "lib*.a" и "lib*.so*". Определите, какие пути вам нужны, а затем добавьте эти пути поиска в библиотеке, используя опцию "-L path".

И теперь ты знаешь, что делать. -Chuck

Другие вопросы по тегам