gpt4 book ai didi

ubuntu - objcopy 在 makefile 上失败,但在终端中手动输入没有问题

转载 作者:行者123 更新时间:2023-12-04 19:09:36 25 4
gpt4 key购买 nike

我有这个带有以下命令的 Makefile:

all:
gcc -MD -fno-builtin -nostdinc -fno-stack-protector -Os -g -m32 -I. -c -o boot0.o boot0.S
ld -nostdlib -m elf_i386 -N -e start -Ttext 0x7c00 -o boot0.elf boot0.o
objcopy -S -O binary boot0.elf boot0
....

虽然这些命令是预先编写的,我只是复制并粘贴到 makefile 中,而我这样做
make all

在终端中,它将返回
make: objcopy: command not found

考虑到我通过 VMBox 运行 Xubuntu,这是不可能的。但后来我发现,如果我手动输入该命令,它将起作用。但是,如果我将命令复制并粘贴到终端中,它将不起作用。即使我确实粘贴了它,我也需要重新输入 objcopy为了使它工作。但是这个技巧不适用于makefile。它也发生在 gccld ,但是当我在 makefile 中重新键入命令而不是 objcopy 时,它们最终都起作用了.这里有什么问题?

最佳答案

But later on I found out that if I manually type that command it will work. But it won't work if I copy and paste the command into the terminal. Even if I did paste it I need to re-type objcopy in order to make it work.



如果将命令复制并粘贴到终端窗口中不起作用,但在同一终端窗口中手动(重新)键入命令确实有效,那么您实际上并没有输入相同的命令。

Also it happens on gcc and ld, but both of them eventually worked when I re-typed the command in makefile but not objcopy.



这对我来说非常有用。您的 makefile 很可能包含 Ubuntu 无法识别为空白的非打印字符。至少一个这样的字符紧邻每个命令名称,可能就在它之前,命令名称被解释为包括该字符。此外,您可以将其与命令一起剪切和粘贴,但是如果您只是在 makefile 中键入看似命令的内容,那么它当然不存在。

有时人们会看到与使用 Windows 行终止符而不是 Unix 行终止符相关的类似问题,但这里的情况似乎并非如此。我推测它可能源于从网页复制 makefile 内容。

您可以通过使用 the tr command 处理它来过滤您的 makefile 中的所有此类字符。 :
tr -cd '\t\n\040-\176' < Makefile > Makefile.new

这保留了从代码 040 到八进制 176 的制表符、换行符和 ASCII 字符(== 32 - 126 十进制 == 20 - 7e 十六进制)。您可以通过比较原始文件和新文件的大小来判断它是否改变了任何内容。假设新文件较小且看起来不错,请继续替换原始文件。

关于ubuntu - objcopy 在 makefile 上失败,但在终端中手动输入没有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59976892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com