Re: ARM "file format not recognised" mess
Phil Endecott wrote:
file not recognized: File format not recognized
collect2: ld returned 1 exit status
No replies yet; any ideas anyone?
There's another possibility. A while ago I converted my target
hardware [an NSLU2 and another similar XScale board, both running
Debian] to use an NFS root filesystem. So I could just mount this
under /usr/arm-linux-gnu/ on my cross-compilation PC. Would this make
I thought that I had seen some mention of this approach before, but
maybe I was mistaken. Isn't it essentially the same as running
non-cross apt/dpkg inside a chroot? Anyway, I've been investigating;
there are various obstacles but they seem surmountable:
1. I can't just mount the ARM filesystem's root at /usr/arm-linux-gnu
because /usr/arm-linux-gnu/bin contains the x86 cross-assembler, linker
etc. as invoked by /usr/bin/arm-linux-gnu-gcc. This raises the
question of "what is /usr/arm-linux-gnu for?". It seems that e.g.
/usr/bin/arm-linux-gnu-as and /usr/arm-linux-gnu/bin/as are hard links
to each other. Why does /usr/bin/arm-linux-gnu-gcc call
/usr/arm-linux-gnu/bin/as, not /usr/bin/arm-linux-gnu-as? Anyway, I
have instead mounted the ARM filesystem's /usr/include and /usr/lib as
/usr/arm-linux-gnu/include and /usr/arm-linux-gnu/lib, leaving
2. I then get the problem that the ARM filesystem has both /lib and
/usr/lib, while there is only one /usr/arm-linux-gnu/lib that the
compiler looks in. So I have mounted the ARM /lib elsewhere and giving
the compiler another -L. (A "transparent mount" feature would help
3. But the ARM /usr/lib includes some symlinks to /lib (e.g. libm.so),
which of course now point to the x86 /lib. One option is to replace
them with hard links.
4. That just leaves the ARM /usr/lib/libc.so, which is a linker-script
fragment that refers to /lib/libc.so.6 and /usr/lib/libc_nonshared.a.
I can't use a hard-link to replace that. It would be nice if I could
use a relative symlink, but that ends up pointing to the wrong place.
Hmm. Presumably the -cross packages fix these issues during the
conversion process, but I need for the ARM system to still work simultaneously.
Any comments would be much appreciated.