Wow, thanks for all the interesting replies. In the mean time here is what I came up with:<div><br></div><div> ld -r -b binary -o binary.o helloworld.txt</div><div><br></div><div><div>#include <stdint.h></div><div><br>
</div><div>extern char _binary_helloworld_txt_start[];</div><div>extern char _binary_helloworld_txt_end[];</div><div><br></div><div>void* helloworld(uintptr_t* i) {</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>uintptr_t a = (uintptr_t)&_binary_helloworld_txt_start;</div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>uintptr_t b = (uintptr_t)&_binary_helloworld_txt_end;</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>(*i) = b - a;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>return &_binary_helloworld_txt_start;</div>
<div>}</div></div><div><br></div><div>gcc -c -o test.o test.c</div><div>ar rcs libtest.a test.o binary.o</div><div><br></div><div><div>program testresources;</div><div><br></div><div>type</div><div>  TExternResource = function(out Size: UIntPtr): Pointer;</div>
<div><br></div><div>function ResString(Res: TExternResource): string;</div><div>var</div><div>  P: Pointer;</div><div>  I: UIntPtr;</div><div>begin</div><div>  P := Res(I);</div><div>  SetLength(Result, I);</div><div>  Move(PChar(P)[0], PChar(Result)[0], I);</div>
<div>end;</div><div><br></div><div><div>function helloworld(out Size: UIntPtr): Pointer; cdecl; external;</div><div><br></div><div>{$linklib test}</div><div><br></div></div><div>var</div><div>  S: string;</div><div>begin</div>
<div>  S := ResString(@helloworld);</div><div>  WriteLn(S);</div><div>end.</div></div><div><br></div>