Я преобразовал проект, который прекрасно работает с gcc 2017.3 eabi-none (raw metal, x86_x64 кросс-компиляция для ARM A7, компилятор RM) в gcc 2019.3 raw metal компилятор Cortex-A.Он работает хорошо, но сталкивается с одной странной проблемой.
В проекте есть make-файл, который строит набор небольших тестовых компонентов, разложенных в дерево:
project/test/drivertype1/foo.c
project/test/drivertype2/bar.c
etc.
Рабочий каталог makeproject/
.Внутри foo.c
есть некоторые включенные двоичные файлы с помощью директивы inline Assembly .incbin
.Данные находятся в подкаталоге:
project/test/drivertype1/data/input.bin
Этот относительный путь разделен.Командная строка имеет -Itest/drivertype1
- левую сторону относительного пути - и исходный код имеет правую сторону:
__asm__ (
"test_message:\n"
" .incbin \"data/input.bin\"\n"
"test_message_end:"
)
Это приводит к ошибке сборки:
Assembler messages:
22: Error: file not found: data/input.bin
Я воспроизвожу это, вытащив команду из журнала make-файлов и запустив ее вручную.
Если я запускаю команду с рабочим каталогом, установленным в project/
, как make, то ошибка воспроизводится.Если я вместо этого запускаю его из project/test/drivertype1/
, то он собирается.
При запуске из project
я попытался указать полный путь (например, -I/home/user/.../project/test/drivertype1
), и он не работает.И я пробовал другие подобные тесты с относительными путями.
Мой вывод таков, что -I
не используется с .incbin
в отличие от того, что говорит человек.
Предложения?