【问题标题】:compiling the source into object files using gcc -c *.c使用 gcc -c *.c 将源代码编译成目标文件
【发布时间】:2017-08-13 13:38:30
【问题描述】:

我的操作系统是 Windows 10。这次我使用命令提示符进行编译。

根据我正在阅读的书,编译所有源文件并使其成为目标文件,(在当前目录中)通过键入以下命令来完成:

gcc -c *.c

它说操作系统会将 *.c 替换为所有 C 文件名

但是为什么会出现这个错误?

gcc: error: *.c: Invalid argument
gcc: fatal error: no input files
compilation terminated.

我在正确的目录中。 当我用它们各自的名称编译我的源文件时,它工作正常。但是 '*.c' 不起作用。

在使用 '*.o' 链接目标文件时也会出现同样的错误

该命令不是用于 Windows 操作系统吗?如果没有,windows 是什么?

这里是新手。

【问题讨论】:

  • 跨网复制here。我建议你安装一个 unix shell 模拟器,避免使用 windows 命令提示符。 Cygwin 就是这样一种可能的模拟器。
  • 您确定当前工作目录中至少有一个.c 文件吗?否则*.c 不会被扩展,因此gcc 接收单个命令行参数*.c
  • @GrzegorzSzpetkowski。是的先生。我在正确的目录中。
  • @StoryTeller.. Tnx 先生.. 我会读的。

标签: c windows compilation wildcard object-files


【解决方案1】:

在 Unix 系统和环境(如 MSYS 或 Cygwin)上,通配符由 shell(取决于)扩展,但在 Windows CMD 中,通配符由接收程序扩展和解释。这听起来很奇怪,但cmd.exe 不支持通配符扩展(作为解释器),但它的一些内置命令支持,例如COPY

使用一个简单的程序来验证它。

#include <stdio.h>
int main(int argc, char *argv[]){
    int i;
    for (i = 1; i < argc; i ++)
        printf("%s\n", argv[i]);
    return 0;
}

Unix 上的示例输出:

$ ./a.out /*
/bin
/boot
/dev
...
/usr
/var
$ ./a.out /\*
/*
$

Windows 上的示例输出:

C:\Windows\system32>a.exe C:\*
C:\*
C:\Windows\system32>

如果您想让其他东西为您的程序扩展通配符,请使用 MinGW (MSYS) 或 Windows Subsystem for Linux(Win 10 1607 及更高版本)。

【讨论】:

    【解决方案2】:

    在 Windows 中,支持通配符,因此您会看到错误。

    但在 UNIX 中,您使用的是正确的:

    Georgioss-MacBook-Pro:~ gsamaras$ nano main.c
    Georgioss-MacBook-Pro:~ gsamaras$ nano fun.h
    Georgioss-MacBook-Pro:~ gsamaras$ nano fun.c
    Georgioss-MacBook-Pro:~ gsamaras$ gcc -c *.c
    Georgioss-MacBook-Pro:~ gsamaras$ 
    

    【讨论】:

    • Mingw 在内部管理它。在 linux 中我认为它依赖于 shell
    • 你最好把你的答案澄清为In Windows CMD。 Cygwin 等模拟 Unix 环境仍然为 CLI 程序处理通配符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多