GCC创建MIME类型应用程序/X-SharedLib而不是应用程序/X-Application

gcc creates mime type application/x-sharedlib instead of application/x-application

本文关键字:应用程序 X-Application X-SharedLib 类型 创建 GCC MIME      更新时间:2023-10-16

给定以下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'作为哑剧类型?

我在Kubuntu上使用GCC 6.2.0。

GCC未设置MIME类型。mimetype根据文件内容猜测适当的MIME类型。对于小精灵文件(大多数编译的二进制文件和共享库),标头包含一个字段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根本不相容的额外的安全保护。

要在qt/c GUI应用程序上求解它,请在.pro文件上添加以下行:

QMAKE_LFLAGS += -no-pie