связывание параметров для преобразования файлов .o в .elf

#makefile #arm #cross-compiling

#makefile #arm #перекрестная компиляция

Вопрос:

У меня есть шесть исходных файлов, и я хотел бы связать их, используя .elf формат. Я написал makefile, который преобразует все файлы исходного кода в файлы .obj.

Когда я пытаюсь связать эти объектные файлы, используя синтаксис, который я привел в файле makefile, появляются следующие ошибки:

 gcc -c rt_look.c
Linking ARM test_rom.elf
make[1]: o: Command not found
make[1]: [test_rom.elf] Error 127 (ignored)
make[1]: Leaving directory `/c/Imperas/Demo/main/isolated_model_ert_rtw
  

Я также вставляю правила makefile:

 all:$(OBJ) test_rom.elf 

ert_main.o:              ert_main.c isolated_model.h rtwtypes.h
             gcc -c ert_main.c
isolated_model.o:        isolated_model.c isolated_model.h isolated_model_private.h
             gcc -c isolated_model.c
isolated_model_date.o:   isolated_model_data.c isolated_model.h isolated_model_data.h
             gcc -c isolated_model_data.c
rt_look2d_normal.o:      rt_look2d_normal.c rtlibsrc.h
             gcc -c rt_look2d_normal.c
rt_nonfinite.o:          rt_nonfinite.c rt_nonfinite.h
             gcc -c rt_nonfinite.c
rt_look.o:           rt_look.c rtlibsrc.h
             gcc -c rt_look.c
syscalls.o:          syscalls.c
             gcc -c syscalls.c
test_rom.elf:        $(OBJ) 
                     $(V) echo "Linking $(CROSS) $@"
                     $(V) $(IMPERAS_LINK) -o $@ $^ $(IMPERAS_LDFLAGS) -lm

clean::
-rm -f test_rom.elf
-rm -f *.$(OBJ).o

endif
  

Ответ №1:

Переменные V and IMPERAS_LINK не заданы или имеют пустое значение, поэтому при сборке test_rom.elf make выполняется команда

 -o $ @ $^ $(IMPERAS_LDFLAGS) -lm

который пытается выполнить o команду. Поскольку первый символ в команде равен - , make ошибка игнорируется.

Попробуйте заменить "Linking $(CROSS)" на "Linking $(CROSS) with $(IMPERAS_LINK)" , чтобы убедиться, что это так.

Комментарии:

1. Спасибо за ответ. Но проблема оказалась намного сложнее, чем я думал. Мне пришлось также предоставить скрипты компоновщика, поскольку код elf, сгенерированный этим makefile, должен быть смоделирован на симуляторе OVP. Файл elf не компилируется из-за ошибки синтаксического анализа в файле сценария компоновщика, которую я пытаюсь исправить.