Ubuntu 把C/C++ source file 识别成plain text

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
mammothpang
帖子: 1
注册时间: 2018-06-28 10:32
系统: 18.04

Ubuntu 把C/C++ source file 识别成plain text

#1

帖子 mammothpang » 2018-06-28 10:42

2018-06-28 10-39-53屏幕截图.png
2018-06-28 10-39-24屏幕截图.png
创建.c或者.cpp文件后,系统不识别成源代码文件而识别成空白文件,用GCC编译后才识别成源文件,但编译出来的不是可执行文件而是共享库文件
头像
astolia
论坛版主
帖子: 6386
注册时间: 2008-09-18 13:11

Re: Ubuntu 把C/C++ source file 识别成plain text

#2

帖子 astolia » 2018-06-28 16:48

类unix系统判断文件类型和windows不一样,除了文件扩展名以外,还要看文件内容的特征。
根据文件内容与已知类型特征的符合程度,会给予一个分值,得分最高的类型才会被认定为文件的类型。这么做比windows光看扩展名可靠一些。

c源码的判定特征是文件内容中有//或/*或#include,这些都会提高分值。

而共享库的判定特征是,ELF文件头中有ET_DYN标志。各大linux发行版为了增强安全性,从前几年开始陆续都给gcc默认启用了PIE,来编译成可重定位的执行文件,这在以前上只有动态链接库才会这样。所以现在你用gcc默认参数编译出的都会被判定为共享库,不过除了不能在图形界面直接双击运行外,在命令行下运行或者通过启动器运行效果都和原来一样。

如果不想要启用PIE,你可以编译时手动添加参数将其禁用 gcc -fno-pie -no-pie xxx.c
回复