[fpc-pascal] Cross compiling x86_64 on i386 Linux.
tony.whyman at mccallumwhyman.com
Tue May 29 10:40:04 CEST 2012
If you are using a Debian derived distribution such as Ubuntu, you might
find it easier to use debootstrap to create a 64 bit environment on your
system and compile the program in that environment (see
https://help.ubuntu.com/community/DebootstrapChroot for a guide). Then
you can be sure that you have all the correct libraries in their
standard paths, etc.
In my set up, I compile for both 64 bit and 32 bit targets on a 64 bit
machine and have separate debootstrap (chroots) for each target
environment rather than compile in the development environment. This
ensures that the final compilation takes place in a known clean
environment. I also have a chroot for a win32 cross compiler.
Once you have created the chroot for each target, all you need to do is
to install the fpc debs in the appropriate environment (64 bit fpc for
the 64 bit environment, 32 bit for the 32 bit environment), install any
other libraries you need for the distribution repository and then
compile the software in each chroot separately. The result will be
executables built for each target and built in a clean environment. If
you also want to generate distribution packages (debs), this is also the
best way to go about it.
On 29/05/12 03:19, Bruce Tulloch wrote:
> Closer, but not quite there yet...
> To get this going I've (sshfs) mounted a 64 bit system on /mnt/engels
> and then attempted to cross-compile on the 32 bit system with:
> fpc -MDelphi -Scgi -CX -O3 -OoUNCERTAIN -OoREGVAR \
> -Tlinux -Px86_64 -Xs -XX -va -l \
> -dLCL -dLCLgtk2 -XR/mnt/engels
> This compiles but fails at the linker:
> Searching file /mnt/engels/usr/lib64/crtn.o... found
> Searching file /usr/local/opt/binutils/bin/x86_64-linux-ld... found
> Using util /usr/local/opt/binutils/bin/x86_64-linux-ld
> /usr/local/opt/binutils/bin/x86_64-linux-ld: skipping incompatible
> /lib/libpthread.so.0 when searching for /lib/libpthread.so.0
> /usr/local/opt/binutils/bin/x86_64-linux-ld: cannot find
> Error: Error while linking
> Fatal: There were 1 errors compiling module, stopping
> The linker
> was created using (an appropriately modified)
> i.e. built to run on i386 and target x86_64
> and the pthread library is (presumably, given the -XR option)
> which file reports as
> libpthread-2.11.3.so: ELF 64-bit LSB shared object, x86-64, version
> 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux
> 2.6.18, not stripped
> How can I find out why x86_64-linux-ld reports it as incompatible?
> Many thanks, Bruce.
> On 05/28/12 23:02, Jonas Maebe wrote:
>> On 28 May 2012, at 14:56, Bruce Tulloch wrote:
>>> Am I correct to assume that if I drag in the x86_64 libraries I need
>>> from another x86_64 system, put them in a local directory and then
>>> reference then using the -XR option I can make this setup work?
>> -XR is for pointing the compiler/linker to the top of a complete sysroot (i.e., a hierarchy with /lib, /usr/lib etc), not to a directory with just few handpicked libraries. For the latter, use the -Fl command line switch instead, possibly combined with -Xd (to prevent the compiler from passing the default system directories as search paths to the linker).
>> And yes, that should indeed work fine.
>> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
More information about the fpc-pascal