# vi hello
#include<stdio.h>
int main()
{
printf("hello,world\n");
}
==========================================
# gcc hello -o hello
/usr/lib/gcc/....(错误提示)
# cat hello
现在就已经找不到hello文件了,1) 它到哪去了? 2)系统自动删除了吗 ? 3) 为什么要这么做?
23 个解决方案
#1
不知道楼主是咋回事,我这试了下,虽然也会提示错误,但是文件还在当前目录下的。。。
不知道是不是因为我用MinGW gcc的原因。。。
不知道是不是因为我用MinGW gcc的原因。。。
#2
你保存了吗.
#3
gcc hello -o hello,你把源文件名搞的跟目标文件名相同,肯定会有问题啊,最简单的方法就是换个名呗:
gcc hello -o hello.o
gcc hello -o hello.o
#4
wq
保存了的。是我机器的问题吗?
系统版本是:red hat 2.6.9-42.EL
保存了的。是我机器的问题吗?
系统版本是:red hat 2.6.9-42.EL
#5
你生成的文件和源文件一样,覆盖了?
#6
不是,没有生产的文件,并且源文件也没有了!
#7
估计是gcc在建立生成的文件时就把你的源文件清空了,但在编译的时候发现源文件也没有了。
这不能算是什么问题,完全是使用不当造成的。
这不能算是什么问题,完全是使用不当造成的。
#8
# vi hello.c
#include<stdio.h>
int main()
{
printf("hello,world\n");
}
gcc -o hello hello.c
#include<stdio.h>
int main()
{
printf("hello,world\n");
}
gcc -o hello hello.c
#9
# gcc hello -o xxoo
-o 后面别用相同的名字不就得了。
#10
gcc的规则是先语法判断编译在链接之前先看有无这个程序,如果有就删除,然后进行链接
是链接器的行为
是链接器的行为
#11
测了一下,确实是这样的,下面编译之后的错误信息:
hello: file not recognized: File truncated
collect2: ld returned 1 exit status
编译器要生成可执行文件,因为-o hello.目标文件是hello,但是编译后有错误:file not recognized.然后就执行:File truncated.可以理解为文件被删除了。
但是你这样编译就没有问题:gcc -Wall hello -o app,hello不会被删除,错误信息如下:
hello: file not recognized: File format not recognized
collect2: ld returned 1 exit status
hello: file not recognized: File truncated
collect2: ld returned 1 exit status
编译器要生成可执行文件,因为-o hello.目标文件是hello,但是编译后有错误:file not recognized.然后就执行:File truncated.可以理解为文件被删除了。
但是你这样编译就没有问题:gcc -Wall hello -o app,hello不会被删除,错误信息如下:
hello: file not recognized: File format not recognized
collect2: ld returned 1 exit status
#12
你生成的文件和源文件一样,覆盖了?
同意楼上的、、
同意楼上的、、
#13
会删除?!
如果编译成功
gcc hello.c -o hello
不是应该有两个文件吗,hello,hello.c
如果编译成功
gcc hello.c -o hello
不是应该有两个文件吗,hello,hello.c
#14
gcc是编译器驱动程序,它根据输入文件的扩展名调用对应的编译器或连接器
你给的没扩展名,gcc没法知道是什么语言的源文件,就直接传给ld
ld的做法是删除-o指定的文件,根据输入的文件链接然后创建-o指定的文件,但由于你这里输入和输出是同一个文件,所以先把-o的删了输入文件也没了
你给的没扩展名,gcc没法知道是什么语言的源文件,就直接传给ld
ld的做法是删除-o指定的文件,根据输入的文件链接然后创建-o指定的文件,但由于你这里输入和输出是同一个文件,所以先把-o的删了输入文件也没了
#15
改为.c 扩展名
#16
gcc hello -o hello
这里的-o表示生成的可执行文件的名字叫hello
显然跟你的源文件hello同名了
gcc hello -o hello1
先这样看看有什么结果
这里的-o表示生成的可执行文件的名字叫hello
显然跟你的源文件hello同名了
gcc hello -o hello1
先这样看看有什么结果
#17
gcc hello -o hello
牛人~~
#18
说明gcc有bug,没发现楼主犯下的这种常识性错误。
#19
这不是错误、这是吃多了。。! 要跳。。
没事找事!
没事找事!
#20
in out 相同了
#21
我擦....我昨晚也干了这么件事, 我把 GCC -O list.c list.c
然后 ./list.c 就可以执行了. 原来的 list.c 文件内容没了. 这个"list.c" 是二进制可执行文件.
然后 ./list.c 就可以执行了. 原来的 list.c 文件内容没了. 这个"list.c" 是二进制可执行文件.
#22
gcc hello.o -o hello
#23
我在我电脑上试过:
提示错误:
gcc hello -o hello.o
hello: file not recognized: File format not recognized
collect2: ld 返回
同样hello 会丢失。原因我认为是gcc生成hello覆盖掉vi 编写的hello(gcc在文件系统上重新生成hello文件名,此时就算vi 编写的hello不丢失,里面的数据也会改变),同时由于GCC编译出错,最终不能生成Hello文件,此时就会退出,hello文件此时就会消失。
提示错误:
gcc hello -o hello.o
hello: file not recognized: File format not recognized
collect2: ld 返回
同样hello 会丢失。原因我认为是gcc生成hello覆盖掉vi 编写的hello(gcc在文件系统上重新生成hello文件名,此时就算vi 编写的hello不丢失,里面的数据也会改变),同时由于GCC编译出错,最终不能生成Hello文件,此时就会退出,hello文件此时就会消失。
#1
不知道楼主是咋回事,我这试了下,虽然也会提示错误,但是文件还在当前目录下的。。。
不知道是不是因为我用MinGW gcc的原因。。。
不知道是不是因为我用MinGW gcc的原因。。。
#2
你保存了吗.
#3
gcc hello -o hello,你把源文件名搞的跟目标文件名相同,肯定会有问题啊,最简单的方法就是换个名呗:
gcc hello -o hello.o
gcc hello -o hello.o
#4
wq
保存了的。是我机器的问题吗?
系统版本是:red hat 2.6.9-42.EL
保存了的。是我机器的问题吗?
系统版本是:red hat 2.6.9-42.EL
#5
你生成的文件和源文件一样,覆盖了?
#6
不是,没有生产的文件,并且源文件也没有了!
#7
估计是gcc在建立生成的文件时就把你的源文件清空了,但在编译的时候发现源文件也没有了。
这不能算是什么问题,完全是使用不当造成的。
这不能算是什么问题,完全是使用不当造成的。
#8
# vi hello.c
#include<stdio.h>
int main()
{
printf("hello,world\n");
}
gcc -o hello hello.c
#include<stdio.h>
int main()
{
printf("hello,world\n");
}
gcc -o hello hello.c
#9
# gcc hello -o xxoo
-o 后面别用相同的名字不就得了。
#10
gcc的规则是先语法判断编译在链接之前先看有无这个程序,如果有就删除,然后进行链接
是链接器的行为
是链接器的行为
#11
测了一下,确实是这样的,下面编译之后的错误信息:
hello: file not recognized: File truncated
collect2: ld returned 1 exit status
编译器要生成可执行文件,因为-o hello.目标文件是hello,但是编译后有错误:file not recognized.然后就执行:File truncated.可以理解为文件被删除了。
但是你这样编译就没有问题:gcc -Wall hello -o app,hello不会被删除,错误信息如下:
hello: file not recognized: File format not recognized
collect2: ld returned 1 exit status
hello: file not recognized: File truncated
collect2: ld returned 1 exit status
编译器要生成可执行文件,因为-o hello.目标文件是hello,但是编译后有错误:file not recognized.然后就执行:File truncated.可以理解为文件被删除了。
但是你这样编译就没有问题:gcc -Wall hello -o app,hello不会被删除,错误信息如下:
hello: file not recognized: File format not recognized
collect2: ld returned 1 exit status
#12
你生成的文件和源文件一样,覆盖了?
同意楼上的、、
同意楼上的、、
#13
会删除?!
如果编译成功
gcc hello.c -o hello
不是应该有两个文件吗,hello,hello.c
如果编译成功
gcc hello.c -o hello
不是应该有两个文件吗,hello,hello.c
#14
gcc是编译器驱动程序,它根据输入文件的扩展名调用对应的编译器或连接器
你给的没扩展名,gcc没法知道是什么语言的源文件,就直接传给ld
ld的做法是删除-o指定的文件,根据输入的文件链接然后创建-o指定的文件,但由于你这里输入和输出是同一个文件,所以先把-o的删了输入文件也没了
你给的没扩展名,gcc没法知道是什么语言的源文件,就直接传给ld
ld的做法是删除-o指定的文件,根据输入的文件链接然后创建-o指定的文件,但由于你这里输入和输出是同一个文件,所以先把-o的删了输入文件也没了
#15
改为.c 扩展名
#16
gcc hello -o hello
这里的-o表示生成的可执行文件的名字叫hello
显然跟你的源文件hello同名了
gcc hello -o hello1
先这样看看有什么结果
这里的-o表示生成的可执行文件的名字叫hello
显然跟你的源文件hello同名了
gcc hello -o hello1
先这样看看有什么结果
#17
gcc hello -o hello
牛人~~
#18
说明gcc有bug,没发现楼主犯下的这种常识性错误。
#19
这不是错误、这是吃多了。。! 要跳。。
没事找事!
没事找事!
#20
in out 相同了
#21
我擦....我昨晚也干了这么件事, 我把 GCC -O list.c list.c
然后 ./list.c 就可以执行了. 原来的 list.c 文件内容没了. 这个"list.c" 是二进制可执行文件.
然后 ./list.c 就可以执行了. 原来的 list.c 文件内容没了. 这个"list.c" 是二进制可执行文件.
#22
gcc hello.o -o hello
#23
我在我电脑上试过:
提示错误:
gcc hello -o hello.o
hello: file not recognized: File format not recognized
collect2: ld 返回
同样hello 会丢失。原因我认为是gcc生成hello覆盖掉vi 编写的hello(gcc在文件系统上重新生成hello文件名,此时就算vi 编写的hello不丢失,里面的数据也会改变),同时由于GCC编译出错,最终不能生成Hello文件,此时就会退出,hello文件此时就会消失。
提示错误:
gcc hello -o hello.o
hello: file not recognized: File format not recognized
collect2: ld 返回
同样hello 会丢失。原因我认为是gcc生成hello覆盖掉vi 编写的hello(gcc在文件系统上重新生成hello文件名,此时就算vi 编写的hello不丢失,里面的数据也会改变),同时由于GCC编译出错,最终不能生成Hello文件,此时就会退出,hello文件此时就会消失。