[fpc-pascal] Linking error with unit initc on arm

Jonas Maebe jonas.maebe at elis.ugent.be
Fri Aug 21 11:55:49 CEST 2015


Martin Schreiber wrote on Fri, 21 Aug 2015:

> Cross compiling Linux-x86->eabihf of the program:
> "
> program rpiconsole;
> uses
>  initc;
> begin
> end.
> "
> produces the messages:
> "
> Free Pascal Compiler version 3.0.1 [2015/08/14] for arm
> Copyright (c) 1993-2015 by Florian Klaempfl and others
> Target OS: Linux for ARMHF
> Compiling rpiconsole.pas
> Assembling rpiconsole
> Linking rpiconsole
> rpiconsole.pas(6) Warning: "crti.o" not found, this will probably cause a
> linking failure
> rpiconsole.pas(6) Warning: "crtbegin.o" not found, this will probably cause a
> linking failure
> rpiconsole.pas(6) Warning: "crtend.o" not found, this will probably cause a
> linking failure
> rpiconsole.pas(6) Warning: "crtn.o" not found, this will probably cause a
> linking failure

To be able to cross-compile a program that depends on a library for  
any Unix platform, you need to have a sysroot available with all of  
those libraries and their own requirements (such as crti.o and crtn.o  
for glibc, and crtbegin.o and crtend.o for gcc-compiled code). That is  
unrelated to FPC and inherent to the way linking works on (most) Unix  
platforms. If you want to cross-compile using gcc or clang, you also  
need to have the target platform's sysroot available.

It's also unrelated to ARM. The reason it works transparently on many  
Unix systems for cross-compiling between x86_64 and i386, is that  
these systems include both a sysroot for x86_64 and for i386.

The easiest is probably to copy the entire /usr hierarchy of the  
Raspberry Pi to your own machine, and then pass the parent directory  
in which you copied that "/usr" using FPC's -XR parameter.

As mentioned in the "Issue with linking" thread, you will have to  
separately tell FPC where to find crtbegin.o and crtend.o, as their  
location depends on the GCC version used. Since the sysroot path (-XR  
parameter) should be prepended to any search paths specified after the  
-XR parameter, make sure this path is relative to the sysroot. Use  
FPC's -va parameter to see which search paths get added exactly in  
case of problems (and possibly use -Cn and inspect the generated  
ppas.sh and link.res).


Jonas



More information about the fpc-pascal mailing list