2012-11-27 18 views
26

Android GCC toolchain (düz linux, android veya NDK) kullanarak bir yerli Linux ARM ikili inşa ettim."Böyle bir dosya veya dizin yok" Android cihazda linux ikili çalıştırmaya çalışıyor

PC'mden, adb kabuğuyla, Android 4 çalıştıran bir tablete bağlandım. Ben oraya yürütmeyi umuyordum diye, o aygıttaki/sistem/bin bileşenini "adb push" yazdım. Ben chmod 777 ile çalıştırılabilir olarak işaretledim.

Çalıştırmaya çalışırsam, "Böyle bir dosya veya dizin yok" alırdım.

Daha fazla bilgi: Küçük program fc ve fm lib'lerini kullanır. ARM araç zincirinin crt1'e sahip görünmemesi nedeniyle, bulduğum bir örnekte normalde başlangıç ​​kodunu içerir, android yapısını içeren dosyaları aradık, crtbegin_dynamic ve crtend_dynamic'i bulduk, ancak _static karşılığı için çiftlerden biri eksikti, bu yüzden GCC'ye -statik geçmedim. "-nostdlib" ile kuruldu.

Sorun (lar) ne olabilir?

+4

Yürütücünüzün bağımlılıklarını bulmak için nm veya benzerlerini kullanmanız gerekir, ancak gerçekçi bir şekilde, işleri zor yoldan yapmakta ısrar etmediğiniz sürece Android için yalnızca NDK gcc'yi kullanmanız gerekir. ** Unutmayın ki bu soru, gizemli bir şekilde, tamamen farklı bir konu üzerinde popüler bir cevap çekmiş olmasına rağmen, geliştirme makinesi ** için eksik kütüphaneler ile ilgisi yoktur. –

cevap

49

Ubuntu 64 gibi bir 64 bit platform üzerinde çalışıyorsanız, bu ipucu sorunu çözmenize yardımcı olabilir. Sadece basit apt-get yüklü i386 32-bit uyumluluk kütüphaneleri elde etmeye çalışmak:

sudo apt-get install ia32-libs 

Benim için harika çalıştı. Aynı sıkıntıda kalmış olursan bana haber ver. Ubuntu 13.10 için

veya aditya Bu yanıta yorumların söylediği gibi

büyüktür: Ubuntu 13.10 itibariyle

olarak artık bu çalıştırmak zorundadır: sudo apt-get install lib32z1 elde edersiniz gerekebilir C++ bununla da stdlibs: sudo apt-get install lib32ncurses5 lib32stdc++6

+3

Bunu yapabilirim. –

+0

Sorunu giderir! –

+11

Ubuntu 13.10'dan itibaren ia32-libs aşağıdaki paket tarafından değiştirilmiş gibi görünüyor. Bir anda bu çalıştırmak zorundadır: 'sudo apt-get bununla da stdlibs ++ Ben C almak zorunda lib32z1' yükleyin: ' sudo apt-get install lib32ncurses5 lib32stdC++ 6' – aditya

2

yukarıda Aditya yorumuna değişiklik için ayrıca Ubuntu 13.10 C++ stdlibs için aşağıdakileri kullanabilirsiniz:

sudo apt-get install lib32ncurses5 libstdc++6:i386 
+2

Sorunun, Android'de bir yürütülebilir dosyayı çalıştırmasıyla ilgili sorulan soruyla ilgisi yoktur - debian paketleme sistemini kullanmayan bir linux. –