Re: [問題] ARM execution No such file or dictio …
※ 引述《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)
推
08/04 18:49, , 1F
08/04 18:49, 1F
→
08/04 18:49, , 2F
08/04 18:49, 2F
→
08/05 09:48, , 3F
08/05 09:48, 3F
→
08/05 09:49, , 4F
08/05 09:49, 4F
→
08/05 09:51, , 5F
08/05 09:51, 5F
→
08/05 09:52, , 6F
08/05 09:52, 6F
推
08/05 21:31, , 7F
08/05 21:31, 7F
討論串 (同標題文章)
完整討論串 (本文為第 6 之 6 篇):