Hello,
Quite a number of people already reported having problems with this in the lazarus forum when cross-compiling for Android and yesterday it was my turn to hit this. I searched quite a bit in old threads but I haven't seen any satisfactory resolution, and it seams that the problem isnt so common outside fpc.
Basically I have 2 computers, which AFAIK have nearly the same set of tools: 1> FPC 2.6 RC1
2> My snapshot FPC 2.5.1 cross-compiler x86-linux -> arm-linux 3> Lazarus from SVN
4> Mageia Linux 1
5> Building the project lazarus-ccr/examples/androidlclv2 6> Android NDK r5
I think they have cross-binutils from the same rpm too, but I still have to recheck this.
The first computer is a real desktop and there everything works fine. I can built the application normally linking against the NDK
The second one is a virtual machine running in Parallels Desktop, but Parallels is nearly perfect ... I am yet to find a bug which is caused due to the virtual machine. And a lot of people have been reporting this in the forum, so it seams a common problem which affects real computers too.
In my case even the directory structure in both machines is the same, so I pass my library -Fl path in both like this:
/home/felipe/Programas/android-ndk-r5/platforms/android-9/arch-arm/usr/lib/
There are no changes here in anything of my source project and lazarus source, I checked with "svn diff", but in virtual machine I get the infamous errors from arm-linux-ld:
Compiling resource
/home/felipe/Programas/lazarus-ccr/examples/androidlclv2/lib/arm-linux/androidlcltest.or Linking /home/felipe/Programas/lazarus-ccr/examples/androidlclv2/android/libs/armeabi/libmain.so /usr/bin/arm-linux-ld: warning:
/home/felipe/Programas/lazarus-ccr/examples/androidlclv2/android/libs/armeabi/link.res contains output sections; did you forget -T?
/usr/bin/arm-linux-ld: skipping incompatible /usr/lib//libc.so when searching for -lc
/usr/bin/arm-linux-ld: skipping incompatible /usr/lib/crtn.o when searching for /usr/lib/crtn.o
/usr/bin/arm-linux-ld: cannot find /usr/lib/crtn.o androidlcltest.lpr(24) Error: Error while linking
androidlcltest.lpr(24) Fatal: There were 1 errors compiling module, stopping
arm-linux-ld seams to have a fixed idea about where to find libc and it refuses to search in my path from -Fl, but it finds libandroid.so correctly in the provided path, which is even more confusing.
I have trying all of the following things to try to fix it:
1> First I tryed to change that -Fl to
/home/felipe/Programas/android-ndk-r5/platforms/android-9/arch-arm/usr/ (with lib/)
Now it will complain that it can't find libandroid.so, so this shows that the previously utilized path is valid and recognized
2> I tryed to change /etc/ld.conf (or something like that). Didn't help, so I restored it back
3> I tryed:
export PATH=/home/felipe/Programas/android-ndk-r5/platforms/android-9/arch-arm/usr/lib:$PATH didn't help
4> I tryed to change the NDK between v5 and v7 to no help
5> I tryed both FPC 2.4.4 and FPC 2.6 as the x86-linux compiler in case the fpc binary was eating parameters or something like that (the arm-linux one never changes, and cannot be changed and is precisely the same in both cases, it was built in the real computer, but since the time it was built I have formatted my / partition and installed a newer version of my Linux)
6> I tryed:
export LIBPATH=/home/felipe/Programas/android-ndk-r5/platforms/android-9/arch-arm/usr/lib didn't help
7> Google didn't bring anything useful also, threads from C users seam to solve the issue with gcc options. example:
http://stackoverflow.com/questions/1964880/cannot-find-lib-libc-so-6
Points to using "-sysroot" from gcc
