外部依存関係がなく、const データ セクションのみの C ファイルがあるとします。このファイルをコンパイルして、別のプログラムにロードできるバイナリ BLOB を取得したいと思います。このプログラムでは、関数ポインタを介して関数が使用されます。
例を見てみましょう。これは架空のバイナリ モジュール f1.c です。
static const unsigned char mylut[256] = {
    [0 ... 127] = 0,
    [128 ... 255] = 1,
};
void f1(unsigned char * src, unsigned char * dst, int len)
{
    while(len) {
        *dst++ = mylut[*src++];
        len--;
    }
}
f1.o、次にf1.binにコンパイルし、prog.cでこのように使用したいと思います
int somefunc() {
    unsigned char  * codedata;
    f1_type_ptr  f1_ptr;
    /* open f1.bin, and read it into codedata */
    /* set function pointer to beginning of loaded data */
    f1_ptr =(f1_type_ptr)codedata;
    /* call !*/
    f1_ptr(src, dst, len);
}
f1.c から f1.o に移動するには、位置の独立性を得るために -fPIC が必要だと思います。f1.o から f1.bin に移行するために使用できるフラグまたはリンカー スクリプトは何ですか?
明確化:
動的リンクについて知っています。この場合、動的リンクはできません。リンクステップは、可能であれば、ロードされたデータへの func ポインターをキャストする必要があります。
OS のサポートはないと仮定してください。可能であれば、たとえばアセンブリに f1 を PC 関連のアドレス指定で記述します。