Cross compilation examples

Cross compiling, or "porting", packages designed for one environment (typically x86) to the ARM/Xscale architecture is quite feasible in most instances, but is often non-trivial. Potential obstacles include:
 * Limited gumstix flash capacity
 * Missing libraries
 * Incompatible features in the package
 * Headers and includes (more on that below)

The limited flash is readily overcome with the use of an MMC or CF card and symlinks in the buildroot. It is probable an NFS mount could be used, as well.

Missing libraries can usually be found through http://www.rpmfind.net/

Incompatible features are best disabled during configuration prior to doing a "make". Stripped features may not even be needed, but if desired work can be done to add them once a functional binary has been created without the particular feature enabled.

The most stubborn cross-compilation effort, as of July 2006, has been Expect (http://expect.nist.gov/). The configure script creates small C test programs during the course of executing in an effort to determine information about the host environment. If the code cannot execute, it assumes cross-compilation is happening and the script halts with an error. To overcome this the tests must be extracted and manually compiled by the cross-compiler. Then run on the gumstix one at a time. Noting the result, and hardcoding it into the configure script.

Many other packages compile quite readily, after some trial and error. Other articles in this category will detail the process for specific packages, such as, PHP.