给定以下 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
如何将“application/x-application”作为 MIME 类型?
我在 Kubuntu 上使用 gcc 6.2.0。
最佳答案
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 类型的事实不应被视为错误,除非您知道自己在做什么,否则您不应该这样做覆盖它。 -pie
允许一些额外的安全保护,这些保护从根本上与 -no-pie
不兼容。
关于c++ - gcc 创建 mime 类型 application/x-sharedlib 而不是 application/x-application,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41398444/