При сборке busybox я обнаружил, что некоторые исходные файлы включают заголовки ядра Linux. Я добавил #define __KERNEL__, чтобы выбрать часть строк файла заголовка. и я также добавил #define _BUSYBOX_ и вставил #ifndef _BUSYBOX_ в заголовочный файл ядра, чтобы какая-то конкретная часть не выбиралась компилятором. (Я не знаю, что это правильный подход)
Следующая проблема, с которой я сталкиваюсь, ниже. В нем говорится, что fd_set определен дважды.
In file included from /opt/snakede/lib/gcc/sparc-snake-linux/4.6.2/../../../../sparc-snake-linux/sys-include/linux/thread_info.h:10:0,
from /opt/snakede/lib/gcc/sparc-snake-linux/4.6.2/../../../../sparc-snake-linux/sys-include/linux/preempt.h:9,
from /opt/snakede/lib/gcc/sparc-snake-linux/4.6.2/../../../../sparc-snake-linux/sys-include/linux/spinlock.h:50,
from /opt/snakede/lib/gcc/sparc-snake-linux/4.6.2/../../../../sparc-snake-linux/sys-include/linux/mmzone.h:7,
from /opt/snakede/lib/gcc/sparc-snake-linux/4.6.2/../../../../sparc-snake-linux/sys-include/linux/gfp.h:4,
from /opt/snakede/lib/gcc/sparc-snake-linux/4.6.2/../../../../sparc-snake-linux/sys-include/linux/slab.h:12,
from archival/libarchive/unxz/xz_private.h:16,
from archival/libarchive/unxz/xz_dec_bcj.c:11,
from archival/libarchive/decompress_unxz.c:36:
/opt/snakede/lib/gcc/sparc-snake-linux/4.6.2/../../../../sparc-snake-linux/sys-include/linux/types.h:23:26: error: conflicting types for 'fd_set'
/opt/snakede/lib/gcc/sparc-snake-linux/4.6.2/../../../../sparc-snake-linux/include/sys/select.h:75:5: note: previous declaration of 'fd_set' was here
Сообщение показывает, что fd_set был сначала определен в sparc-snake-linux/include/sys/select.h, а затем снова в sparc-snake-linux/sys-include/linux/types.h. Использование
эхо "" | sparc-snake-linux-gcc -o /tmp/tmp.o -v -x c -
Я мог видеть, что путь включения по умолчанию
#include <...> search starts here:
/opt/snakede/lib/gcc/sparc-snake-linux/4.6.2/include
/opt/snakede/lib/gcc/sparc-snake-linux/4.6.2/include-fixed
/opt/snakede/sparc-snake-linux/sys-include
/opt/snakede/sparc-snake-linux/include
Он сначала ищет /opt/snakede/sparc-snake-linux/sys-include перед /opt/snakede/sparc-snake-linux/include, но файл в /opt/snakede/sparc-snake-linux/include был выбран первым в любом случае . Поэтому вставлено много #ifndef BUSYBOX Guard, чтобы вторые определения были заблокированы при компиляции. Заблокированные строки в основном находятся в каталоге sys-include. Я хочу знать, является ли это допустимым методом (просто блокируя второе определение) или есть другой, более приятный, четко определенный метод для такого рода ситуаций (например, вместо этого я должен был заблокировать первое определение - в основном из файлов заголовков gcc include) - и используйте файлы в каталоге sys-include, которые предназначены для целевой системы) РЕДАКТИРОВАТЬ: с помощью #ifndef BUSYBOX я заблокировал более 20 определений, появляющихся во второй раз, и все еще вижу такие ошибки. Не знаю, правильный ли это подход.