首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >objcopy在makefile上失败,但在终端中手动键入没有问题

objcopy在makefile上失败,但在终端中手动键入没有问题
EN

Stack Overflow用户
提问于 2020-01-29 23:05:34
回答 1查看 286关注 0票数 0

我有以下命令的Makefile:

代码语言:javascript
复制
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中,而我则是这样做的。

代码语言:javascript
复制
make all

在终点站,它会返回

代码语言:javascript
复制
make: objcopy: command not found

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-30 01:50:39

,但后来我发现,如果手动输入该命令,它就会工作。但是,如果我将命令复制并粘贴到终端中,它将无法工作。即使我粘贴了它,我也需要重新输入objcopy以使它工作。

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

也发生在gcc和ld身上,但是当我在makefile中重新输入命令时,这两种方法最终都起作用了,而不是objcopy。

对我来说差不多是钉子了。生成文件很可能包含Ubuntu不承认为空白的非打印字符。至少有一个这样的字符紧邻每个命令名,可能就在其前面,命令名被解释为包括该字符。此外,您可以与命令一起剪切和粘贴该命令,但是如果您只在makefile中键入似乎是命令的内容,那么它当然就不在了。

有时,人们会发现与Windows行终止程序而不是Unix行终止器相关的类似问题,但这里似乎并非如此。我推测它可能起源于从网页复制makefile内容。

您可以通过使用the tr command处理生成文件中的所有这些字符

代码语言:javascript
复制
tr -cd '\t\n\040-\176' < Makefile > Makefile.new

这使制表符、换行符和ASCII字符从代码040到176个八进制(== 32 - 126小数点== 20 - 7e十六进制)。您将能够通过比较原始文件和新文件的大小来判断它是否改变了任何事情。假设新文件更小,看起来也不错,那么继续替换原来的文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59976892

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档