Bruce,

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.

Regards

Tony Whyman
MWA Software




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
/lib/libpthread.so.0
   Error: Error while linking
   Fatal: There were 1 errors compiling module, stopping

The linker

  /usr/local/opt/binutils/bin/x86_64-linux-ld

was created using (an appropriately modified)

   fpcfixes_2.6/cross/buildcrossbinutils

i.e. built to run on i386 and target x86_64

   MYINTEL=i386
   TARGETS_X86_64="linux"

and the pthread library is (presumably, given the -XR option)

   /mnt/engels/lib/libpthread.so

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.


Jonas_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to