为什么终端找不到我的可执行文件

为什么终端找不到我的可执行文件

大家好,我一直在尝试使用 make 和 Ubuntu 14.04 来实现构建的自动化

我已经创建了两个简单的程序

测试2

测试2.c

#include <stdio.h>

int main()
{
    printf("%s","Built using make");
    return 0;
}

和 test.exe

主程序

extern int print();

int _start()
{
    print();
    return 0;
}

测试文件

int print()
{
    printf("%s","Built using make");
    return 0;
}

Makefile

print:
    gcc -Wall test.c -c -o test.o
    gcc -Wall main.c -c -o main.o
    ld -o test.exe test.o main.o -lc    
test:
    gcc -Wall test2.c -o test2.exe

我遇到的问题是终端无法使用该命令找到 test.exe,./test.exe但可以使用./test2.exe

它给我的错误是bash: ./test.exe: No such file or directory

当它在目录中清晰可见时。

我正在调用 make print 来构建 test.exe 并调用 make test 来构建 test2.exe,为什么会发生这种情况

根据评论进行编辑ls ld test.exe 的输出是

ls: cannot access ld: No such file or directory
ls: cannot access test.exe: No such file or directory

输出make print

gcc -Wall test.c -c -o test.o
gcc -Wall main.c -c -o main.o

ld -o test.exe test.o main.o -lc Ant **
的输出make test gcc -Wall test.c -o test2.exe

目录截图

在此处输入图片描述

ls 输出的屏幕截图

在此处输入图片描述

ls -q输出

在此处输入图片描述

答案1

当你查看 Nautilus 中的文件列表(或ls不带参数运行)时,它会显示一个文件,其名称出现成为test.exe

但是当您将test.exe其作为参数传递给时ls,它找不到它,并输出错误:

ls: cannot access test.exe: No such file or directory

最可能的解释是,该文件的名称显示为test.exe,但这并不是它的实际名称。

当文件名称包含非打印字符。您可以通过运行 来验证这一假设ls -q。如果显示包含一个或多个 的文件?,其名称类似于test.exe,则可确认问题存在。如果不是,则问题可能有其他原因。

由于您有一个图形桌面并且 Nautilus 显示该文件,因此解决问题的最简单方法可能是test.exe在 Nautilus 中将其重命名。

在文件浏览器窗口中,右键单击名称为 的文件test.exe。单击“重命名...”以编辑文件名。按Ctrl+A选择整个名称,然后按DeleteBackspace清除它。(或者只需开始输入新名称,它将覆盖它。)输入test.exe。按Enter

然后尝试再次运行您的程序。


如果这解决了问题,那么问题就立即出现了如何文件名中出现了非打印字符。由于文件名是在 中指定的Makefile,所以您可能意外地在文本编辑器中粘贴或以其他方式输入了包含控制字符

您可以移除并替换test.exeMakefile修复那里的问题。

如果在 Nautilus 中重命名文件不是解决问题 - 或者如果ls -q没有显示任何?字符 - 请编辑您的问题以使用有关发生了什么的详细信息进行更新,然后继续解决问题。

相关内容