-1

我安装了 Ubuntu 64 位,当我使用标志编译 C 文件时:

gcc -g -m32 -ansi -Wall -c -o *.o *.c

它编译文件,但是当我尝试在终端中运行它们时,什么也没有发生。

所以我决定尝试编译和运行一个没有makefile的简单文件,代码如下:

#include <stdio.h>
int main()
{
    printf("Hello World");
    return 0;
}

编译成功,但是当我尝试运行该文件时,我什么也没得到...

注意:我已经尝试安装 lib32gcc1、libc6-i386 和 g++-multilib。

我该如何解决这个问题?

4

3 回答 3

2

将 -o *.o 替换为 -o 程序名。-o 参数接收您正在生成的程序的可执行名称。这是 gcc 手册:

http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Overall-Options.html#Overall-Options

于 2013-03-16T14:13:11.510 回答
1

对于简单的测试,请忽略所有选项:

> cat test.c
#include <stdio.h>
int main()
{
  printf("Hello World\n");
  return 0;
}

> gcc test.c

> ./a.out
Hello World

看看这是否有效。

于 2013-03-16T12:56:52.163 回答
0

让我们假设您(已经)有两个目标文件a.ob.o,它们对应的源文件a.cb.c一些公共头文件ch.h;然后你的(不正确的)命令行

 gcc -g -m32 -ansi -Wall -c -o *.o *

可以扩展为:

 gcc -g -m32 -ansi -Wall -c -o a.o b.o a.c b.c ch.h a.o b.o

(实际上,这会更糟,例如,如果您有一些Makefile或一些来自编辑的备份文件a.c~,如 William Pursell 所说)

这将编译但不链接,文件b.o a.c b.c ch.h a.o b.o意义不大。

您应该了解 shell 在执行任何gcc程序(在新进程中)之前首先扩展参数。要了解扩展的内容,请考虑替换gccecho(或gcc -v显示实际发生的情况)

然后,您应该阅读有关调用 GCC的 GCC 文档

实际上,您需要花几个小时阅读,例如Advanced Bash Scripting Guide(可能确实有一些错误)和Advanced Linux Programming。几个维基百科页面也可以用来阅读。

于 2013-03-16T13:02:04.000 回答