Я использую linux3.3, и недавно при создании busybox для новой команды обнаружил, что добавленный исходный файл busybox использует заголовки ядра Linux.
Итак, я поискал в Интернете и сделал «make headers_install ARCH = .. CROSS_COMPILE = .. INSTALL_HDR_PATH = ..», чтобы извлечь заголовки, которые можно использовать для программы пользовательского пространства.
Затем я использовал новые файлы заголовков вместо файлов в sparc-snake-linux / sys-include.
Но мне пришлось скопировать некоторые недостающие файлы из sys-include в новые каталоги заголовков и скопировать некоторые недостающие определения из файлов sys-include в соответствующий файл в новых файлах заголовков. (Где-то в Интернете я читал это 'make headers_install' не был обновлен после linux2.6 или около того)
Это то, что я должен делать? (Почему отсутствуют какие-то файлы? Я думаю, это потому, что make headers_install не поддерживается и не работает для версий позже, чем 2.6? Я прав?)
Используя этот метод, я удалил десятки «неопределенных» ошибок, но теперь я вижу конфликт определений между файлами из sparc-snake-linux / sys-include (конечно, новая очищенная и улучшенная версия) и sparc-snake-linux / включают. Какую версию использовать?
И если мне удастся выполнить компиляцию (исправив проблемы с заголовками), нужно ли мне заново собирать glibc с этими новыми заголовочными файлами? (Боюсь, это так. Я использую glibc для busybox)
Любая помощь будет очень признательна.
Благодарность
Чан
ДОБАВИТЬ: Я извлек новые файлы заголовков, используя указанную выше команду, и построил busybox с новой добавленной командой (маршрут и другие функции, связанные с IP). Он работает нормально, и причина, по которой это не сработало, заключалась в том, что у меня была определена переменная KERNEL для busybox, чего не следует делать (потому что busybox - это не код ядра, а программа пользователя).
1 ответ
Я извлек новые файлы заголовков, используя указанную выше команду, и построил busybox с новой добавленной командой (маршрут и другие функции, связанные с IP). Он работает нормально, и причина, по которой это не сработало, заключалась в том, что я на какое-то время по глупости определил переменную _KERNEL_ для busybox, чего не следует делать (потому что busybox - это не код ядра, а пользовательская программа).
когда вы используете
эхо "" | Arch-abc-linux-gcc -o /tmp/tmp.o -v -x c -
вы можете увидеть стандартный путь включения. Если кросс-компилятор предназначен для компиляции приложения в Linux (например, приведенного выше), он будет иметь путь к системному заголовку linux в стандартном пути включения. Замените это новым извлеченным путем заголовка. Я использовал параметр -nostdinc и явно указал путь включения.
Похожие вопросы
Новые вопросы
linux
ВНИМАНИЕ: Все вопросы по Linux должны быть связаны с программированием; те, которые не будут закрыты. Используйте этот тег, только если ваш вопрос касается программирования с использованием API-интерфейсов Linux или поведения, специфичного для Linux, а не только потому, что вы запускаете свой код в Linux. Если вам нужна поддержка Linux, вы можете попробовать https://unix.stackexchange.com или сайт Stack Exchange конкретного дистрибутива Linux, например https://askubuntu.com или https://elementaryos.stackexchange.com/.