gcc下,不加.c的文件,编译后不见了,哪去了?

coding_my_life 2012-05-10 03:36:57
例:
# vi hello
#include<stdio.h>
int main()
{
printf("hello,world\n");
}


==========================================

# gcc hello -o hello
/usr/lib/gcc/....(错误提示)

# cat hello
现在就已经找不到hello文件了,1) 它到哪去了? 2)系统自动删除了吗 ? 3) 为什么要这么做?
...全文
1442 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Red_angelX 2013-03-26
  • 打赏
  • 举报
回复
in out 相同了
yulitingfeng 2013-03-26
  • 打赏
  • 举报
回复
我在我电脑上试过: 提示错误: 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文件此时就会消失。
vuqrzk5w 2013-03-26
  • 打赏
  • 举报
回复
gcc hello.o -o hello
咕噜咕噜斯基 2013-03-26
  • 打赏
  • 举报
回复
我擦....我昨晚也干了这么件事, 我把 GCC -O list.c list.c 然后 ./list.c 就可以执行了. 原来的 list.c 文件内容没了. 这个"list.c" 是二进制可执行文件.
赵4老师 2013-03-25
  • 打赏
  • 举报
回复
说明gcc有bug,没发现楼主犯下的这种常识性错误。
Joseph_ 2013-03-25
  • 打赏
  • 举报
回复
这不是错误、这是吃多了。。! 要跳。。 没事找事!
mujiok2003 2013-03-24
  • 打赏
  • 举报
回复

gcc hello -o hello
牛人~~
ForestDB 2013-03-24
  • 打赏
  • 举报
回复
gcc hello -o hello 这里的-o表示生成的可执行文件的名字叫hello 显然跟你的源文件hello同名了 gcc hello -o hello1 先这样看看有什么结果
maybug 2013-03-24
  • 打赏
  • 举报
回复
改为.c 扩展名
Lactoferrin 2012-05-10
  • 打赏
  • 举报
回复
gcc是编译器驱动程序,它根据输入文件的扩展名调用对应的编译器或连接器
你给的没扩展名,gcc没法知道是什么语言的源文件,就直接传给ld
ld的做法是删除-o指定的文件,根据输入的文件链接然后创建-o指定的文件,但由于你这里输入和输出是同一个文件,所以先把-o的删了输入文件也没了
coding_my_life 2012-05-10
  • 打赏
  • 举报
回复
会删除?!
如果编译成功
gcc hello.c -o hello
不是应该有两个文件吗,hello,hello.c


[Quote=引用 10 楼 的回复:]

gcc的规则是先语法判断编译在链接之前先看有无这个程序,如果有就删除,然后进行链接

是链接器的行为
[/Quote]
夏天__ 2012-05-10
  • 打赏
  • 举报
回复
你生成的文件和源文件一样,覆盖了?

同意楼上的、、
自信男孩 2012-05-10
  • 打赏
  • 举报
回复
测了一下,确实是这样的,下面编译之后的错误信息:
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
xunxun 2012-05-10
  • 打赏
  • 举报
回复
gcc的规则是先语法判断编译在链接之前先看有无这个程序,如果有就删除,然后进行链接

是链接器的行为
jiligululalala 2012-05-10
  • 打赏
  • 举报
回复

# gcc hello -o xxoo

-o 后面别用相同的名字不就得了。
Lactoferrin 2012-05-10
  • 打赏
  • 举报
回复
# vi hello.c
#include<stdio.h>
int main()
{
printf("hello,world\n");
}

gcc -o hello hello.c
liubingqian 2012-05-10
  • 打赏
  • 举报
回复
估计是gcc在建立生成的文件时就把你的源文件清空了,但在编译的时候发现源文件也没有了。
这不能算是什么问题,完全是使用不当造成的。
coding_my_life 2012-05-10
  • 打赏
  • 举报
回复
不是,没有生产的文件,并且源文件也没有了!

[Quote=引用 5 楼 的回复:]

你生成的文件和源文件一样,覆盖了?
[/Quote]
qq120848369 2012-05-10
  • 打赏
  • 举报
回复
你生成的文件和源文件一样,覆盖了?
coding_my_life 2012-05-10
  • 打赏
  • 举报
回复
wq

保存了的。是我机器的问题吗?
系统版本是:red hat 2.6.9-42.EL

[Quote=引用 2 楼 的回复:]

你保存了吗.
[/Quote]
加载更多回复(3)

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧