تركيب ثنائي التي سبق إنشاؤها على الروبوت: "لم يتم العثور"
سؤال
وأنا أحاول تثبيت ثنائي التي سبق إنشاؤها في صورة مخصصة الروبوت. لذلك لقد نسخه إلى دليل جديد في prebuilt/android-arm/
مع ملف Android.mk
مشابهة لهذه واحدة:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := binary_name
LOCAL_MODULE := binary_name
LOCAL_MODULE_CLASS := EXECUTABLES
include $(BUILD_PREBUILT)
وحتى لو كنت تشغيل make system_image binary_name
، يتم نسخ ملف ثنائي ل/bin/
في صورة النظام. وإذا قمت بتشغيل المحاكي أستطيع أن أرى ملف ثنائي في /system/bin
. الأذونات هي نفس الملفات التنفيذية الأخرى (-rwxr-xr-x
)، وفقا لfile
، وهذا هو ثنائي ARM (ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped
).
ولكن عندما تشغيله على المحاكي، فإنه يقول:
# binary_name
binary_name: not found
ولقد straced ذلك وهذا ما أستطيع أن أرى:
# strace binary_name
execve("/system/bin/binary_name", ["binary_name"], [/* 9 vars */]) = -1 ENOENT (No such file or directory)
write(2, "strace: exec", 12strace: exec) = 12
write(2, ": ", 2: ) = 2
write(2, "No such file or directory", 25No such file or directory) = 25
write(2, "\n", 1
) = 1
io_submit(1, -1344063348, {...} <unfinished ... exit status 1>
ولكن الملف هو هناك، وstrace غير قادرة على العثور عليه.
وأي فكرة عما يمكن أن يحدث؟
<القوي> UPDATE : لوكما يقول كريستوف، وربما هذا هو مشكلة ربط حيوي، ولكن ليس لدي LDD لالروبوت ARM ...
المحلول
ولعل بعض المكتبات الديناميكية المطلوبة لا يمكن العثور عليه.
وحاول "LDD binary_name '
والناتج ينبغي أن ننظر قليلا مثل هذا إذا يمكن الاطلاع على جميع المكتبات. المكتبات في عداد المفقودين يجب أن تحمل علامات واضحة.
linux-gate.so.1 => (0xb7fbf000)
libcap.so.2 => /lib/libcap.so.2 (0xb7fa7000)
libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7fa3000)
libncursesw.so.5 => /lib/libncursesw.so.5 (0xb7f64000)
libm.so.6 => /lib/i686/cmov/libm.so.6 (0xb7f3e000)
libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7dde000)
libattr.so.1 => /lib/libattr.so.1 (0xb7dd9000)
/lib/ld-linux.so.2 (0xb7fc0000)