在终端中运行已编译的GCC文件时,没有任何反应

时间:2013-03-16 12:51:56

标签: c linux terminal

我安装了Ubuntu 64位,当我使用flags编译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。

如何解决此问题?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

对于简单的测试,请保留每个选项:

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

> gcc test.c

> ./a.out
Hello World

看看是否有效。

答案 2 :(得分: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所述) < / p>

将编译但不链接,文件b.o a.c b.c ch.h a.o b.o并不意味着什么。

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

然后,您应该阅读有关invoking GCC

的GCC文档

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