[fpc-pascal] Crosscompile linking problems
L505
fpc505 at z505.com
Wed Jul 13 00:09:53 CEST 2005
Another option is to use CoLinux, which let's you compile anything once you just
get Linux up and running on windows. I found was a lot less work in the end.
You have access to all linux related commands and linux related everything,
since you are essentially running linux in windows.
|
| Requirements:
| - FPC 1.9.6 or higher. 1.9.4 might work, but untested.
| -
ftp://freepascal.stack.nl/pub/fpc/contrib/cross/mingw/binutils-2.15-win32-i386-l
inux.zip
| - A FPC CVS repository. (anything 1.9.6+ that is buildable will do)
| - a lazarus tree. (anything buildable from the same period will do)
| - Lots of libraries from the target linux system. One of the FPC servers is
some SUSE,
| that's where I got the list below.
|
| 1) Download
ftp://freepascal.stack.nl/pub/fpc/contrib/cross/mingw/binutils-2.15-win32-i386-l
inux.zip
| 2) extract it and move the i386* files to <fpcbindir>\bin\i386-win32 (e.g.
c:\pp\bin\i386\win32)
| 3) enter FPC source dir
| 4) make clean
| 5) make OS_TARGET=linux all
| 6) make OS_TARGET=linux install INSTALL_PREFIX=<fpcbindir>
| 7) prepare the lib directory as in below instructions, I used d:\fpc\linuxlib
to store them.
| 8) go to <fpcbindir>\units\i386-linux\rtl and copy cprt21.o over cprt0.o
| 9) enter lazarus dir
| 10) edit lazarus.pp and add {$linklib dl} and {$linklib gmodule} somewhere in
the source.
| 11) make OS_TARGET=linux all
OPT="-gl -Fld:\fpc\linuxlib -Xr/usr/lib -FL/usr/lib/ld-linux.so.2 "
|
| If some linker error (most specifically linker can't find -l<something>) then
|
| 12) manually edit link.res if needed (see below for gtk remarks) and adapt
the -l<x> names at the bottom of the files. I had to add -1.2 to all gtk
| libs, to keep them apart from gtk2
| 13) run ppas.bat to restart the linker
|
| ----------- Libraries
|
| These are the libraries I collected for both lazarus and the textmode IDE
| (lazarus doesn't need pthread).
|
| I gathered these from the target system, and renamed all from
| lib<name>.so.x.y to lib<name>.so.
|
| libgcc.a and a few others are easiest found by doing gcc -v and look for a
line like
|
| "Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.5/specs"
|
| then some of the libs are in /usr/lib/gcc-lib/i486-linux/3.3.5/
| Some other good locations are /lib /usr/lib /usr/local/lib /usr/x11R6/lib and
/opt/gnome/lib
|
| libpthread.so.0
| libdl.so
| libc.so
| ld-linux.so.2
| crtbegin.o
| crtbeginS.o
| crtbeginT.o
| crtend.o
| crtendS.o
| crtn.o
| crti.o
| libgcc.a
| libX11.so
| libXi.so
| libglib-1.2.so
| libgmodule-1.2.so.0
| libgdk_pixbuf.so
| libgdk-1.2.so
| libgtk-1.2.so
| libXext.so
| libm.so
| libdl.so.2
| libgmodule-1.2.so
|
| Note that some directories are duplicate, with a suffix and not. These are
required because some other lib has a dependancy on that
| exact name (so the form lib<name>.so.x) we can't symlink on windows, so I
simply copy it.
|
| Making mistakes with renaming is not that bad, there will be chances to fix
it. Make sure all crt* and a file "libc.so" are available, otherwise
| generating link.res will go wrong. (Yes, Peter, that was my fault :-)
|
| In my case compilation for step 11 will go ok, but the linker will complain it
can't find libgtk.so and the other libraries marked with -1.2
| This is because on the target system, libgtk is gtk 2.0, while we want gtk1.2
for lazarus.
|
| To fix this I manually added -1.2 to the corresponding -l lines in the bottom
of the link.res file that was generated by step 11
|
| _______________________________________________
| fpc-pascal maillist - fpc-pascal at lists.freepascal.org
| http://lists.freepascal.org/mailman/listinfo/fpc-pascal
More information about the fpc-pascal
mailing list