我安装了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。
如何解决此问题?
答案 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.o
和b.o
,其对应的源文件a.c
和b.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。几个维基百科页面也可以用来阅读。