我用 gcc test.c -o test 命令编译一个程序结果生成的不是可执行文件,却生成了一个共享库文件。如图:
我在CentOS中用同一个文件,相同的命令就能生成可执行文件。
请问是什么原因?
这个没关系的,因为Ubuntu/优麒麟上gcc默认带了 -pie参数(position-independent executable),目标文件行为更像共享库,mime type被识别为了 x-shardlib,如果gcc test.c -no-pie, 可以看到就会识别为x-executable,但是我们不需要去使用-no-pie。具体可以看stackoverflow上的这个回答:https://stackoverflow.com/questions/41398444/gcc-creates-mime-type-application-x-sharedlib-instead-of-application-x-applicati
乖乖,你是不是开发人员转职做版主了
Ubuntu Kylin 上默认的是7.3 的版本,我升级内核后,启动VMware提示需要 GCC 8.2.0 来将几个功能代码编译到内核中,于是我到官网上下载了 GCC 8.2.0 的源码来编译安装,足足耗费了我 5个多小时,早知道就该指定 C/ C++,并且取消校验检查,估计 make 的时候会省时不少,这个应该不会默认带 -pie 参数吧?空了试一下。
早上卖烧饼,晚上做版主。。。
我改成gcc 8.2 ,就没问题了
加一句:半夜还坐……:lol
感觉到一股邪恶的气息。。。