Вторая итерация:
Хорошо, вы подтвердили, что Make строит _helloworld.o
и $(BUILD_ALT_DIR)/Makefile
. Не могли бы вы опубликовать make-файл, который находится в $(KERNEL_BUILD_DIR)
(на x86_64)?
(я выйду на конечности и предположу, что, возможно, $(BUILD_ALT_DIR)
и $(KERNEL_BUILD_DIR)
одинаковы на i386, но не на x84_64.)
РЕДАКТИРОВАТЬ: (третья итерация)
1400 строк? Большая часть этого в одной ветке? Полдюжины include
директив? Архитектурно-ориентированные отрасли? Autoconf
Вам разрешено изменять этот кошмар на месте, или вы должны возиться с инструментами более высокого уровня, такими как automake? (Я спрашиваю только потому, что в последнем случае не очень полезно выяснить, в чем проблема, вам, вероятно, придется начинать все с нуля.)
1) Начиная с $ (KERNEL_BUILD_DIR), попробуйте make M=$(BUILD_ALT_DIR)
(независимо от $(BUILD_ALT_DIR)
). Убедитесь, что это выдает то же сообщение об ошибке. Если это не так, игнорируйте то, что следует (в этой итерации).
2) Начиная с $(BUILD_ALT_DIR)
, попробуйте make
и посмотрите, выдает ли она ту же ошибку. Если это так, попробуйте заменить make-файл (в $(BUILD_ALT_DIR)
) на тривиальный make-файл, такой как
all:
@echo trivial makefile working
и протестируйте его, затем повторите шаг 1. Если он просто говорит "тривиальная работа make-файла" и не выдает ошибку, то все выглядит хорошо.
РЕДАКТИРОВАТЬ: (четвертая итерация)
Хорошо, мы не можем изменить $(KERNEL_BUILD_DIR)/Makefile
. Это не обязательно потопит нас.
"Ваше предложение (1) не будет работать, поскольку $ (BUILD_ALT_DIR) является выходным каталогом, в котором нет источника."
Make не требует наличия исходного кода, и то, будет ли это работать (независимо от того, что означает «работа»), это то, что пытается сделать ваш make-файл:
@$(SHELL) -c 'cd $(BUILD_ALT_DIR); $(MAKE) -C $(KERNEL_BUILD_DIR) M=`pwd`'
Попробуйте и посмотрите, что получится.
«Существует ли вероятность того, что x86_64 не поддерживает традиционный формат (CC) для модуля ядра?»
Я не совсем уверен, что вы имеете в виду, но мы, вероятно, можем ответить на ваш вопрос экспериментальным путем.