Долго не было возможности все проверить — пишу только сейчас.
Нижеследующее проверено мной при компиляции простого тестового примера для Linux
из-под Win32 компилятором версии 2.0. Согласно документации для других сочетаний
целевой и хост-платформы последовательность действий должна быть той же.
1. Что касается непосредственно компиляции — тут проблем нет никаких, по крайней
   мере с FPC 2.0. Кросскомпиляция поддерживается вполне, для чего служит ключ
   -T<xxx>, где <xxx> — целевая система. Хуже дело обстоит с компоновкой.
2. Во-первых, нужны соответствующие целевой системе версии модулей: бинарные или
   в исходниках. В случае бинарных модулей, они должны соответствовать версии
   компилятора. В случае исходников, важно следующее: помимо модуля System
   компилятор использует маленький объектный файл, ассемблерные исходники
   которого находятся вместе с исходниками RTL для соответствующей системы,
   однако as, идущий в составе дистрибутива, кросскомпиляцией не владеет.
   Соответствующий as следует брать там же, где и ld (см. ниже).
   В конфигурационном файле fpc.cfg должны быть строки примерно такого вида:
   -FuC:\pp\units\$FPCTARGET\rtl
   -FuC:\pp\units\$FPCTARGET\fcl и т.д.
   и
   -FDC:\PP\bin\$FPCTARGET
   Первая указывает путь поиска модулей, а вторая — утилит, таких как as или ld.
   Переменная $FPCTARGET зависит от целевой платформы и имеет вид
   <процессор>-<OS>. Соответственно, модули и кросс-версию BinUtils следует так
   и расположить. Лично я просто выдернул каталог модулей i386-linux из
   соответствующего rpm-дистрибутива.
3. Теперь о компоновке. Нужна соответствующая версия линкера ld. Искать
   компилятор ее будет согласно ключу -FD<xxx>. Взять кроссплатформеные версии
   пакета BinUtils, то есть ld, as и иже с ними можно с FTP-сервера
   freepascal.org по адресу: <a href='ftp://ftp.freepascal.org/fpc/contrib/cross/' target='_blank'>ftp://ftp.freepascal.org/fpc/contrib/cross/</a>
   Конкретно Win32 -> прочие системы находится в файле:
   <a href='ftp://ftp.freepascal.org/fpc/contrib/cross/mingw/win32crossbinutils2005.zip' target='_blank'>ftp://ftp.freepascal.org/fpc/contrib/cros...inutils2005.zip</a>
   В наличии имеются:
     - arm-linux
     - i386-freebsd
     - i386-linux
     - mingw32
     - powerpc-linux
     - sparc-linux
     - sparc64-freebsd
     - sparc64-linux
     - x86_64-freebsd
     - x86_64-linux
   Правда, в архиве некоторые файлы имеют не те имена, например — ld называется
   i386-linux-ld.exe. Можно их после распаковки переименовать, можно
   скопировать, а можно даже создать жесткие ссылки — NTFS 5-й версии такое
   позволяет.
4. После того как все файлы рассованы по своим местам и пути прописаны в fpc.cfg
   при помощи переменной $FPCTARGET остается только набрать в командной строке
   что-то вроде:
   fpc -Tlinux test.pp
   И возрадоваться получившемуся.
5. При компоновке с внешними библиотеками через директиву {$LinkLib ...}
   возможны некоторые проблемы. Полагаю, нужно лишь выдернуть соответствующую
   библиотеку (*.a) из целевой платформы, однако проверить у меня пока не
   получилось.
   Такая ситуация возникает, например, при попытке скомпилировать из-под Win32
   примеры с GTK, однако в моем дистрибутиве linux (Mandrake 9.2) некоторые *.a
   файлы отсутствуют, хотя *.h и *.so на месте… Т.е. под Linux'ом у меня эти
   примеры также не компилируются.
			
		



 или особенности национальной кросскомпиляции
  или особенности национальной кросскомпиляции
 А я как раз недавно читал... Проникся, думал попробовать при случае.
 А я как раз недавно читал... Проникся, думал попробовать при случае. 

 Стандартный windows.pas не подходит...
 Стандартный windows.pas не подходит...