Relocatable linking on x86-64 for i386
Shachar Shemesh
shachar at shemesh.biz
Mon Apr 4 11:13:30 IDT 2011
On 04/04/11 10:15, Valery Reznic wrote:
> Hello. I am trying to make relocatable linking on x86-64 box for objects in format i386
>
> Naive
>
> ld -r file1.o file2.o -o output.o
>
> produce
> ld: Relocatable linking with relocations from format elf32-i386 (file1.o) to format elf64-x86-64 (output.o) is not supported
>
> But even when I add --oformat situation not improved:
>
> ld --output-format elf32-i386 -r file1.o file2.o -o output.o
> ld: Relocatable linking with relocations from format elf32-i386 (file1.o) to format elf32-i386 (output.o) is not supported
>
> So linker correctly recognize what input and output format should be,
> but for some reason don't want do it.
>
> Do you have any ideas if it can be done at all and how?
>
Can't. You're trying to link objects compiled for different machine
codes. Tis not the linking stage that is wrong.
While it is possible to run both machine codes on your computer, they
must run in different processes (the kernel actually treats x86 and
amd64 codes differently when it sets up the registers for the context
switch), and thus you cannot link them into a single executable, cannot
dynamically load one from the other, and cannot have two threads with
different types. Your only option for interaction is RPC of some sort
(or recompile one of them).
Shachar
--
Shachar Shemesh
Lingnu Open Source Consulting Ltd.
http://www.lingnu.com
More information about the Linux-il
mailing list