[yocto] Cannot run simple binary executable file

Maciej Borzecki maciej.borzecki at open-rnd.pl
Wed Oct 8 15:04:38 PDT 2014


On Thursday 09 of October 2014 05:34:29 Wy kevinthesun wrote:
> Hi Denys, I have tried 1.5.1 and 1.3. All of them use ld-linux.so.3.
> Actually in the /lib directory of these toolchains I only find
> ld-linux.so.3.

Try running 'readelf -a <yourbinary> |grep FP' this should give a hint on the 
setting of -mfloat-abi that was used during compilation. This post might 
explain more: https://gcc.gnu.org/ml/gcc-help/2012-02/msg00082.html

readelf will also give you the interpreter name that the binary wants to be 
run with (in your case it should be ld-linux.so.3). However, I've also seen 
ld-linux.so.3 being symlinked to proper armhf.so (and program binaries would 
use ld-linux.so as interpreter) or the other way round, so whatever readelf 
prints as the requested interpreter might not necessarily be conclusive.

Long shot, but have you tried grabbing ld-linux.so* from 1.5 and calling it on 
1.6 like this?
	./ld-linux.so.3 ./yourbinary


> 
> Thank you.
> 
> 2014-10-09 4:43 GMT+08:00 Denys Dmytriyenko <denis at denix.org>:
> > On Tue, Oct 07, 2014 at 07:05:42PM -0700, Wy kevinthesun wrote:
> > > However, a new problem occurs. Now when I tries run HelloWorld binary,
> > > after "Hello World" is printed, the terminal also prints "Segmentation
> > > fault". It seems that some memory problems occurs. I guess it comes from
> > > that the 1.5.1 yocto system on boards hopes ld-linux-armhf.so.3 as
> > 
> > dynamic
> > 
> > > linker, instead of ld-linux.so.3, which is used by toolchain. There may
> > 
> > be
> > 
> > > some memory address problem between them. How can I solve it?
> > 
> > As Nicolas suggested earlier, it seems you are trying to mix ABIs here.
> > Because ld-linux-armhf.so.3 indicates the system uses hardfp ABI, but the
> > example app you built with your toolchain wants ld-linux.so.3, which is
> > usually the old softfp ABI. You'd need to match ABIs and the easiest
> > solution
> > is to use the same toolchain that was used to build the system (1.5.1?)
> > 
> > --
> > Denys
> > 
> > > 2014-10-07 18:17 GMT-07:00 Wy kevinthesun <kevinthesunwy at gmail.com>:
> > > > Problem solved! It turns out it is the mismatch of ld-linux.so. I
> > 
> > referred
> > 
> > > > to this post
> > 
> > http://stackoverflow.com/questions/24543474/cross-compiled-gnu-arm-beagleb
> > oneblack-from-windows-runtime-error-on-elf ,
> > 
> > > > and found my problem was exactly the same: the binary needs
> > > > /lib/ld-linux.so.3 to run, but that file is missing in the 1.5.1 yocto
> > > > system on board. Then I copied ld-linux.so.3 file from Yocto toolchain
> > 
> > on
> > 
> > > > my pc. Then it works!
> > > > 
> > > > Thank you!
> > > > 
> > > > 2014-10-07 8:21 GMT-07:00 Nicolas Dechesne <
> > 
> > nicolas.dechesne at linaro.org>:
> > > > On Tue, Oct 7, 2014 at 1:07 PM, Wy kevinthesun <
> > 
> > kevinthesunwy at gmail.com>
> > 
> > > >> wrote:
> > > >> > Hi, I am new to Yocto Project and learning to develop software on
> > 
> > Atmel
> > 
> > > >> > SAMA5D3 Xplained board, on which Yocto 1.5.1 is pre-built. I
> > 
> > followed
> > 
> > > >> the
> > > >> 
> > > >> > instructions and got the 1.6.1 toolchain
> > > >> > 
> > > >> > poky-eglibc-i686-core-image-sato-armv7a-vfp-neon-toolchain-1.6.1.sh
> > 
> > .
> > 
> > > >> > I can compile the simple HelloWorld program and binary file is
> > > >> > made.
> > > >> 
> > > >> Then I
> > > >> 
> > > >> > copied the binary file
> > > >> > 
> > > >> > into board and tried to run it. However, when I changed to the file
> > > >> 
> > > >> located
> > > >> 
> > > >> > directory and type
> > > >> > 
> > > >> > "./Hello", it returned "sh: ./Hello: No such file or directory".
> > 
> > Then I
> > 
> > > >> > tried "sh Hello", it gave
> > > >> > 
> > > >> > me  "Hello: Hello: cannot execute binary file ". If I type "file
> > > >> 
> > > >> Hello", it
> > > >> 
> > > >> > gives "Hello: ELF 32-bit
> > > >> > 
> > > >> >  LSB  executable, ARM, EABI5 version 1 (SYSV), dynamically linked
> > 
> > (uses
> > 
> > > >> > shared libs), for GNU/Linux 2.6.16,
> > > >> > BuildID[sha1]=9933a2d2ce212099c5f9902a8e612c1423e136da, not
> > 
> > stripped". I
> > 
> > > >> > googled and someone
> > > >> > 
> > > >> > said the problem may be the toolchain. Then I tried 1.3, 1.5.1
> > > >> 
> > > >> toolchain for
> > > >> 
> > > >> > arm, but still same
> > > >> > 
> > > >> > error. Could you please help me about this problem?
> > > >> 
> > > >> i suspect this is an armv7 soft-float vs hard-float mismatch. Either
> > > >> your prebuilt OE system is configured with soft-float and the
> > > >> toolchain you use compiled for hard-float by default, or the other
> > > >> way
> > > >> around. can you check how you've compile HelloWolrd and check the
> > > >> other ABI?
> > > 
> > > --
> > > _______________________________________________
> > > yocto mailing list
> > > yocto at yoctoproject.org
> > > https://lists.yoctoproject.org/listinfo/yocto

-- 

Maciej Borzęcki 
Senior Software Engineer Open-RnD Sp. z o.o. 
www.open-rnd.pl, Facebook, Twitter 
mobile: +48 telefon, fax: +48 42 657 9079 

Niniejsza wiadomość wraz z załącznikami może zawierać chronione prawem lub 
poufne informacje i została wysłana wyłącznie do wiadomości i użytku osób, do 
których została zaadresowana. Jeśli wiadomość została otrzymana przypadkowo 
zabrania się jej kopiowania lub rozsyłania do osób trzecich. W takim przypadku 
uprasza się o natychmiastowe zniszczenie wiadomości oraz poinformowanie 
nadawcy o zaistniałej sytuacji za pomocą wiadomości zwrotnej. Dziękujemy. 

This message, including any attachments hereto, may contain privileged or 
confidential information and is sent solely for the attention and use of the 
intended addressee(s). If you are not an intended addressee, you may neither 
use this message nor copy or deliver it to anyone. In such case, you should 
immediately destroy this message and kindly notify the sender by reply email. 
Thank you. 



More information about the yocto mailing list