【问题标题】:Make via Makefile fails but from command line is successful通过 Makefile 制作失败,但从命令行成功
【发布时间】:2022-01-18 06:33:22
【问题描述】:

我正在尝试针对下载的内核树构建一个树外模块。

我的 Makefile 如下所示:

obj-m += userModule.o
ARCH := arm
CC := arm-linux-gnueabihf-
KERN_DIR := /home/user/Downloads/beaglebone-linux-5.10/
CD := /home/user/Downloads/userModule/

all:
       make ARCH=$(ARCH) CROSS_COMPILE=$(CC) -C $(KERN_DIR) M=$(CD) modules
clean:
       make ARCH=$(ARCH) CROSS_COMPILE=$(CC) -C $(KERN_DIR) M=$(CD) clean
help:
       make ARCH=$(ARCH) CROSS_COMPILE=$(CC) -C $(KERN_DIR) M=$(CD) help

当我执行:$make,我得到一个错误:

$make
sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -C /home/user/Downloads/beaglebone-linux-5.10/ M=/home/user/Downloads/userModule/ modules
make: Entering directory '/home/user/Downloads/beaglebone-linux-5.10'
  CC [M]  /home/user/Downloads/userModule//userModule.o
/bin/sh: 1: arm-linux-gnueabihf-: not found
make[1]: *** [scripts/Makefile.build:280: /home/user/Downloads/userModule//userModule.o] Error 127
make: *** [Makefile:1825: /home/user/Downloads/userModule/] Error 2
make: Leaving directory '/home/user/Downloads/beaglebone-linux-5.10'
make: *** [Makefile:9: all] Error 2

但是,当我注释掉除第一行之外的整个 Makefile 时,它​​看起来像这样:

obj-m += userModule.o

我执行相同的命令,但这次是从命令行,一切都没有错误地构建:

$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -C /home/user/Downloads/beaglebone-linux-5.10/ M=$PWD modules

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -C /home/user/Downloads/beaglebone-linux-5.10/ M=$PWD modules
make: Entering directory '/home/user/Downloads/beaglebone-linux-5.10'
CC [M]  /home/user/Downloads/userModule/userModule.o
MODPOST /home/user/Downloads/userModule/Module.symvers
CC [M]  /home/user/Downloads/userModule/userModule.mod.o
LD [M]  /home/user/Downloads/userModule/userModule.ko
make: Leaving directory '/home/user/Downloads/beaglebone-linux-5.10'

一切顺利。

我比较了两个命令,因为它们显示在构建消息中,它们看起来相同。 有没有人经历过这样的行为?

【问题讨论】:

    标签: linux makefile kernel kernel-module


    【解决方案1】:

    CC 变量应该是您的编译器的名称。您已将其设置为字符串arm-linux-gnueabihf-,这不是您的编译器的名称;事实上,它不是您系统上任何程序的名称。所以,当它执行时,你会得到一个错误。

    CC := arm-linux-gnueabihf-
    

    不要设置这个变量。

    【讨论】:

    • 谢谢!它确实解决了这个问题!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    相关资源
    最近更新 更多