2013-05-21 2 views
0

Я студент-электронщик из Бразилии, и сейчас я работаю со встроенными системами.Сложность в использовании стандартных библиотек C в инструменте SoCLib

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

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

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

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

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, поэтому я добавил следующие команды (выделено) на Makefile:

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 [email protected] $(filter %.o,$^) **-lm** -T $(filter %ldscript,$^) $(LIBGCC)* 

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

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

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

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

+0

Просто ссылка на сайт SoCLib: http://www.soclib.fr/trac/dev –

ответ

0

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

Mipsel-неизвестную-эльфа-LD: не может найти -lm

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

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

How does a C compiler find that -lm is pointing to the file libm.a?

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

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

+0

Эй, я попробовал сделать то, что сказал (добавив опцию «-L/path»). Я использовал путь «/ usr/lib/i386-linux-gnu». Но теперь у меня появилось другое сообщение: «mipsel-unknown-elf-ld: пропустить несовместимый /usr/lib/i386-linux-gnu/libm.a при поиске -lm». Исправьте меня, если я ошибаюсь, но я думаю, что эта ошибка произошла, потому что файл «libm.a» несовместим с процессором MIPS, который я пытаюсь использовать.Если это причина возникновения этой ошибки, знаете ли вы, можно ли получить файл libm.a, совместимый с MIPS? –

Смежные вопросы