This is the mail archive of the
mailing list for the binutils project.
Re: Cross compiling for Linux on Windows (ld linker output file won't run as executable on linux and has undefined symbols)
- From: Nicholas Clifton <nickc at redhat dot com>
- To: Kim <soldoutseashell at gmail dot com>, Binutils Development <binutils at sourceware dot org>
- Date: Wed, 23 Apr 2014 10:28:22 +0100
- Subject: Re: Cross compiling for Linux on Windows (ld linker output file won't run as executable on linux and has undefined symbols)
- Authentication-results: sourceware.org; auth=none
- References: <5357470A dot 2010105 at gmail dot com>
The problem is, the output file is slightly different
than the one produced on linux and it won't run as an executable. I
noticed, for example, that in the version linked on windows there is the
undefined symbol "printf" which appears to have become "puts" instead in
the linux version.
I suspect that the printf/puts variance may be a red herring.
Anyway I'm wondering if anyone knows what is happening here.
bash: ./Test: No such file or dire
What happens if you run "file ./Test" ?
What happens if you run "ldd ./Test" ?
Also it appears that you are linking against different math's libraries:
Linking on Windows:
attempt to open I:\Linux\libs\lib\x86_64-linux-gnu\libm-2.17.so succeeded
Linking on linux:
attempt to open /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libm.so succeeded
And that as a result you are pulling in the wrong C library:
> Linking on Windows:
ld-linux-x86-64.so.2 needed by I:/Linux/libs/lib/x86_64-linux-gnu/libc-2.17.so
Also - which version of the linker are you using ? If it is an old
version then that may be causing you problems.