Relocatable linking on x86-64 for i386

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