View on
Rafaël Garcia-Suarez > perl-5.9.5 > Cross/


Annotate this POD

Source   Latest Release: perl-5.25.12

Cross-compilation for linux ^

This is second approach to linux cross-compiling, which should allow building full perl and entensions for target platform. Cross-compiling for linux uses similar approach and share same files as cross-compiling for WINCE.

We refer to HOST as the platform where the build is performed, and to TARGET as where final executables will run.

Basic ideas


Unlike WINCE, output files from GCC cross-compiler are produced in the same directory where C files are. All TARGET binaries have different extensions so to distinguish HOST and TARGET binaries. Namely, object files for arm cross-compilation will have extension .armo, executable files will have .arm.

After typical cross-compilation the following files will be built, among others:


(this approach may be reconsidered, however.)

build process

miniperl is built. This executable is intended to run on HOST, and it will facilitate the remaining build process; all binaries built after it are foreign (TARGET) and should not run locally (HOST).

Unlike HOST build, miniperl will not have of HOST within reach; it rather will use the from the cross-compilation directories. In fact, if the build process does have within reach, this is only an indication of a mistake somewhere in the middle.

  # following command is okay:
  ./miniperl -Ilib -MCross -MConfig -e 1
  # following command should cluck, and it is bad if it does not:
  ./miniperl -Ilib -MConfig -e 1

After miniperl is built, configpm is invoked to create right in right place and its corresponding

File is dead simple: for given cross-architecture places in @INC a path where perl modules are, and right in that place.

That said, miniperl -Ilib -MConfig -we 1 should report an error, because it can not find If it does not give an error -- wrong is substituted, and resulting binaries will be a mess.

miniperl -MCross -MConfig -we 1 should run okay, and it will provide right for further compilations.

During extensions build phase, the script ./ext/util/make_ext_cross is invoked.

All invokes of Makefile.PL are provided with -MCross so to enable cross- compile.


Tools & SDK

For compiling, you need following:

Things to be done ^

syntax highlighting: