我注意到错误的编译和链接命令会导致删除我的一个C源文件。
假设我有2个源文件和一个头文件:test1.c
,test2.c
和header.h
。然后我错误地尝试使用shell命令cc -std=c99 -Wall -Werror -pedantic -o test1.c test2.c
编译和链接这些文件。
由于这个错误的命令,我收到错误消息:
Undefined symbols for architecture x86_64:
"_main", referenced from:
implicit entry/start for main executable
ld: symbol(s) not found for architecture x86_64
。
此后,文件test1.c
将被删除。
我很好奇导致删除的原因是什么?
谢谢。
答案 0 :(得分:2)
您的命令输出到test1.c
,命令失败,因此会有效删除该文件。
cc -std=c99 -Wall -Werror -pedantic -o output test1.c test2.c
^ the output flag
我已修改您的命令以将程序输出到./output
。
[由于评论中的进一步问题而编辑]
关于为什么cc
删除文件的问题:我运行了strace -f cc -o test1.c test2.c
以了解有关它正在做什么的更多信息。在strace输出的某个时刻,你会看到这一行:
[pid XXXXX] unlink("test1.c") = 0
unlink
会删除文件,请在man 3 unlink
了解更多信息。
我认为cc
删除文件的原因是cc
认为它是文件的创建者,因此正在尝试自行清理。