no rule to make target |
![]() |
Добавил(а) microsin |
Сообщение компиляции наподобие "make[1]: *** No rule to make target 'имя_модуля.o', needed by 'output/mcu.elf'" обычно означает отсутствие по какой-то причине модуля исходного кода имя_модуля.c или имя_модуля.cpp. Пример такой ошибки: vsp/common/vsp_vpa.o: In function `_DspInitializeCallback': Сообщение линковщика о том, что не определен символ printf (это может быть и другая функция) означает, что нигде не была определена функция printf, но где-то в коде есть ссылка на неё. Здесь могут быть два варианта: либо ссылка на printf присутствует в доступном исходном коде, либо ссылка есть в какой-то двоичной библиотеке, для которой нет исходного кода. [Ссылка на printf в исходном коде] Это самый частый случай. Если ссылки на printf встречаются в исходном коде, то эти вызовы могут быть просто закомментированы. Или может быть определен макрос, который заменит вызовы printf пустым кодом: #define printf(x...) while(0)
[Ссылка на printf в двоичной библиотеке] Иногда бывает так, что вы запретили использование printf (или какой-то другой функцию) везде в исходном коде, однако вызов этой функции присутствует в какой-то готовой двоичной библиотеке, который нельзя перекомпилировать. В этом случае необходимо добавить в проект свою реализацию функции. Вот пример такой функции для printf, которая ничего не делает: int printf(const char *fmt, ...)
|