作者mecs (mecs)
看板LinuxDev
标题Re: [问题] ARM execution No such file or dictio …
时间Sat Aug 1 12:20:36 2009
※ 引述《septemhill (冰淇淋乾杯)》之铭言:
: ※
: : 看起来像是 program interpreter (也就是 dynamic loader) 的问题。
: : 用 readelf -l <executable> 看一下 program interpreter 是指到哪。
: : 也许你的版子上 dynamic loader 的路径跟执行档里面写的不一样,在这种
: : 情况之下 kernel 会找不到 dynamic loader ,所以如果你的执行档需要用到
: : shared library,就会有问题。
: : 以 gcc 为例,你可以用 -Wl,--dynamic-linker=<path_to_dynamic_loader>
: : 改变内定值,ex:
: : gcc -Wl,--dynamic-linker=/lib/ld-lsb.so.1 -o test test.c
: 敝人按照您给的提示,利用arm-linux-readelf -l hello查看了一下
: 後来发现他指向我host /lib中的某个dynamic library
: 我之前也有事先查过hello所需的动态lib,所以一并先拉到同一资料夹下
: 但是我发现他需要两个动态lib的部份:libc.so.0、ld-uClibc.so.0
: 於是利用您教的指令,我做了重新指向
: arm-linux-gcc -Wl,--dynamic-linker=libc.so.0 -o hello hello.c
: 不过照这样的指令只能动作一个libc.so.0,另一个就没有连进去
: 执行时就会造成错误讯息Sementation fault
: 我也试过用如下的指令
: arm-linux-gcc -Wl,--dynamic-linker=libc.so.0,ld-uClib.so.0 -o hello hello.c
gcc 没有给错误寻息?
: 不过依旧还是Segmentation fault
: 所以想请教一下,现在我还差在哪些地方有问题呢?
: 还请再指点,谢谢
dynamic linker/loader (可参考 ld.so 的 man page) 跟一般的 shared library
角色不太一样,libc.so.0 是属於「一般」的 shared library。ld-uClib.so.0 看起来
像是 dynamic linker/loader, 需要给绝对路径。当 kernel 在执行一个 ELF 的时
後会寻找这个档案(如果 ELF 有记载 program interpreter),如果找不到,就会出现
No such file or directory 。
首先要确认你的 dynamic linker 载那,如果真的是 ld-uClib.so.0,
看一下你的 ld-uClib.so.0 放在什麽地方,如果是在 /lib 那你可以试试:
arm-linux-gcc -Wl,--dynamic-linker=/lib/ld-uClib.so.0 -o hello hello.c
如果 /lib/ld-uClib.so.0 不存在,那你可以查看一下其他可以执行的档案他们
用的 linker 的路径是甚麽。
※ 编辑: mecs 来自: 66.176.233.163 (08/01 12:32)
1F:推 septemhill:真是抱歉,今天问了该公司,他们说是板子的问题 08/04 18:49
2F:→ septemhill:所以没办法port library上去,真是麻烦您不少时间 08/04 18:49
3F:→ mecs:你不需要 port 任何 library 上去 08/05 09:48
4F:→ mecs:除非整个版子上的执行档都是静态连结的,不然一定有一个 08/05 09:49
5F:→ mecs:dynamic loader/linker. 只要找到这个 linker 在版子上的路径 08/05 09:51
6F:→ mecs:便可以使用 -Wl,--dynamic-linker= 08/05 09:52
7F:推 septemhill:整个板子上的执行档确实都是static,这点我确认过了 08/05 21:31