[fpc-devel] compile fpc for i386 from a 64 bit machine

Marc Weustink marc.weustink at cuperus.nl
Thu Nov 29 16:51:57 CET 2007


Alvise Nicoletti wrote:
> Marc Weustink ha scritto:
>> Alvise Nicoletti wrote:
>>> Daniƫl Mantione ha scritto:
>>>> Op Thu, 29 Nov 2007, schreef Alvise Nicoletti:
>>>>
>>>>  
>>>>> Yes, I have the packages needed to open a 32 bit file in my 64 bits 
>>>>> distro
>>>>> (ubuntu-server): .
>>>>> linux32 ia32-libs lib32gcc1 lib32stdc++6 lib32z1 libc6-dev-i386 
>>>>> lib32bz2-dev
>>>>>
>>>>> But the fpc compiler version I'm using have bugfixes introduced by 
>>>>> Joost that
>>>>> are needed in my application, so I will also need a 32 bit fpc 
>>>>> compiler with
>>>>> that inside it...
>>>>> ... or I am wrong?
>>>>>     
>>>>
>>>> Nothing stops you from compiling a 2.2.1 i386 compiler on an x86_64 
>>>> system. It just needs to be bootstrapped with a ppc386, simply do:
>>>>
>>>> make FPC=/path/to/ppc386 CPU_SOURCE=i386
>>>>
>>>> ... and voila.
>>>>   
>>> Honestly I had some problems to understand the mechanism in this, 
>>> however, giving that command suppose that you have a  
>>> "/path/to/ppc386" somewhere, and I hadn't.
>>> I copyed the binary of my other 32 bit server in the 64 bit server, 
>>> in the path: /usr/local/lib/fpc/2.2.1/ppc386
>>> And I did, as you said, a:
>>> make all FPC=/usr/local/lib/fpc/2.2.1/ppc386 CPU_SOURCE=i386
>>>
>>> That seemed to work, it compiled everything, but now I suppose I have 
>>> to do a "make install"...
>>>
>>> But both:
>>> make install CPU_TARGET=i386
>>> make install CPU_SOURCE=i386 
>>
>> try
>>  make install CPU_SOURCE=i386 FPC=/path/to/your/fresh/compiled/ppc386
> Thank you, that seemed to work.
> 
> However,
> 1) going on lazarus and choosing ppc386 as compiler, I got no errors 
> (also the project in the "code" section of "compiler options" is set to 
> i386).
> 2) the project compiles well
> 3) I fail during the link process with that error: "/usr/bin/ld: 
> skipping incompatible /usr/lib/crti.o when searching for /usr/lib/crti.o"
> 
> The file /usr/lib/crti.o exists.

you should have a libdir with 32bit libs and a libdir with 64 bit libs

Edit your fpc.cfg and search for lines beginning with -Fl
Add similar lines pointing to the 32bit libdir.


> In the guide: http://wiki.lazarus.freepascal.org/Cross_compiling
> something about a ld script was written, I created the scripts as 
> indicated (plus chmod +x), but I have not launched them.
> 
> I have to do something related to this?

the compiler will do when needed. You already got beyond that: ld is 
called (since it complains that it cannot find valid libs)

Marc




More information about the fpc-devel mailing list