Возможно, нам придется добавить новые заголовочные файлы при кросс-компиляции Linux.,Где находится этот заголовочный файл? Приложение «Скомпилировать» — это не то же самое, что программа ядра.,Скажите это отдельно.
Компилятор может найти заголовочный файл несколькими способами.
arm-linux-gnueabihf-gcc testtty1.c -o testtty1 -I/linux
Заголовочный файл в приведенном выше примере хранится в файле Linux в корневом каталоге, укажите путь.
C_INCLUDE_PATH=/....(конкретный путь)экспорт C_INCLUDE_PATH
Точно так же, как настройка набора инструментов кросс-компиляции.
Существует два типа файлов заголовков #include <>и#include ""。#include <>Используется путь к среде кросс-компиляции по умолчанию.,#include ""Текущий путь используется по умолчанию.
Вы можете выполнить поиск с помощью команды
echo 'main(){}'|arm-linux-gnueabihf-gcc -E -v -
Среди них, Arm-linux-gnueabihf-gcc зависит от вашего собственного использования инструментов кросс-компиляции (необходимо изменить в соответствии с инструментами кросс-компиляции), и результаты включают в себя следующие части:
#include "..." search starts here:#include <...> search starts here: /opt/pkg/petalinux/2018.3/tools/linux-i386/gcc-arm-linux-gnueabi/bin/../lib/gcc/arm-linux-gnueabihf/7.3.1/include /opt/pkg/petalinux/2018.3/tools/linux-i386/gcc-arm-linux-gnueabi/bin/../lib/gcc/arm-linux-gnueabihf/7.3.1/include-fixed /opt/pkg/petalinux/2018.3/tools/linux-i386/gcc-arm-linux-gnueabi/bin/../lib/gcc/arm-linux-gnueabihf/7.3.1/../../../../arm-linux-gnueabihf/include /opt/pkg/petalinux/2018.3/tools/linux-i386/gcc-arm-linux-gnueabi/bin/../arm-linux-gnueabihf/libc/usr/include
Это расположение заголовка по умолчанию для моей цепочки кросс-компиляции, если вы хотите использовать свой собственный #include. <>документ,Просто поместите заголовочный файл в указанное выше место.
Для компиляции ядра требуется путь к ядру, который используется с использованием приведенного выше пути. по умолчанию。#include <>Ядро используетсяпуть по умолчанию。#include ""Текущий путь используется по умолчанию. Если он не найден в текущем каталоге, он перейдет в ядро. по значение по умолчанию.
Этот путь по умолчанию можно увидеть в Makefile верхнего уровня.
# Use USERINCLUDE when you must reference the UAPI directories only.USERINCLUDE := \ -I$(srctree)/arch/$(hdr-arch)/include/uapi \ -I$(objtree)/arch/$(hdr-arch)/include/generated/uapi \ -I$(srctree)/include/uapi \ -I$(objtree)/include/generated/uapi \ -include $(srctree)/include/linux/kconfig.h
# Use LINUXINCLUDE when you must reference the include/ directory.# Needed to be compatible with the O= optionLINUXINCLUDE := \ -I$(srctree)/arch/$(hdr-arch)/include \ -I$(objtree)/arch/$(hdr-arch)/include/generated \ $(if $(KBUILD_SRC), -I$(srctree)/include) \ -I$(objtree)/include \ $(USERINCLUDE)
Вы можете поместить заголовочный файл по указанному выше пути или изменить этот Makefile, увеличив путь к файлу (не рекомендуется).