给出以下C ++代码&mini.cpp':
#include "iostream"
using namespace std;
int main() {
cout << "Hello World" << endl;
return 0;
}
和编译器命令:
g++ -o hello mini.cpp
的结果
mimetype hello
是
hello: application/x-sharedlib
我如何获得应用程序/ x-application&#39;作为哑剧型?
我在Kubuntu上使用gcc 6.2.0。
答案 0 :(得分:7)
gcc没有设置mime类型。 mimetype
根据文件内容猜出适当的mime类型。对于ELF文件(大多数已编译的二进制文件和共享库),the header包含标识其类型的字段e_type
。如果是ET_DYN
,则mimetype
会将其视为共享库。
默认情况下,gcc / ld会生成将e_type
设置为ET_EXEC
的二进制文件,并将其检测为application/x-executable
。当使用命令行选项-pie
时,会创建一个与位置无关的可执行文件,它可以像共享库一样加载到不同的地址并仍然可以工作。因为这非常像共享库,所以为了避免对加载器进行太多更改,这些二进制文件会被标记为ET_DYN
,即使它们可以直接执行。
包括您的一些Linux发行版已将-pie
设置为默认值。它仍然可以用-no-pie
覆盖它,但是mime类型被错误检测的事实不应该被视为一个错误,除非你知道你正在做什么,否则你不应该&#39} ; t覆盖它。 -pie
允许一些与-no-pie
根本不兼容的额外安全保护。
答案 1 :(得分:1)
要在Qt / C ++ GUI应用程序上解决此问题,请在.pro文件中添加以下行:
QMAKE_LFLAGS += -no-pie