根據與NDK獨立的工具鏈和仿生一定的侷限性,我已經推出採用的crosstool-NG這些常規設置我自己的工具鏈撥打:問題與系統(當交叉編譯的Android
- 的binutils-2.22
- GCC-4.5.3與gfortran啓用
- 的glibc-2.14.1
- 內核頭文件-2.35.7
- 拱ARM4T
使用這個我建立一個可執行文件,並將所有依賴包括libc,ld-linux等與它一起上傳到我的Android設備上。我手動運行可執行文件與ld-linux.so.3 - 庫路徑...
這是一個非常複雜的可執行文件,它似乎工作,除非,如果我做任何系統()調用,甚至一些基本的東西,如系統(「pwd」)或系統(NULL),我得到127作爲狀態(未找到)。如果我走得更遠,使用POPEN而是收集的響應,我得到:
* glibc的檢測*雙重釋放或腐敗
這是怎麼回事?有沒有人成功做過類似的事情?是否有權限問題? Android有什麼根本性的不同,使system()調用不可能?我在哪裏可以找到仿生如何處理系統和popen(源代碼),因爲我認爲如果您使用NDK,則可以執行system()調用。
您什麼時候得到glibc錯誤?在「popen」電話上?或之後的一些電話? –
'/ bin/sh'不在Android上;它在'/ system/bin/sh' AFAIK中。 glibc很可能只是使用'/ bin/sh'。 – nneonneo
nneonneo - 你知道系統()調用在glibc中處理的位置嗎?具體來說,在源代碼中哪裏?除了修改源代碼之外,是否還有更好的方法來覆蓋它的外觀,比如環境變量? – corbin