[英]How to compile and run a simple C code for Android?
這是基本的 C 源代碼:
#include <stdio.h>
int main(void) {
puts("hello world!");
return 0;
}
我可以使用 NDK 工具鏈為 Android 編譯:
aarch64-linux-android21-clang test.c
它生成一個 a.out 文件,我將其傳輸到 Android 設備:
adb push a.out /data/local/tmp
adb shell chmod 777 /data/local/tmp/a.out
當我嘗試運行它時:
adb shell /data/local/tmp/a.out
我收到消息:“/system/bin/sh: /data/local/tmp/a.out: 沒有這樣的文件或目錄”
我究竟做錯了什么?
let cpp=`
#include<iostream>
#include<string>
using namespace std;
int main(){
cout<<"hellow word"<<endl;
return 0;
}
`
let args=['--target=armv7a-linux-androideabi23']
let cpu="armeabi-v7a"
wfs('test.cpp',cpp)
args.push("test.cpp")
args.push("-static-libstdc++")
//in case you want to build sharedlib uncomment next line
//args.push("-shared")
lg=run(runners.clang,args)
lg=run(runners.adb,'push a.out /data/local/tmp/a.out')
//in case -static-libstdc++ not used uncomment next line;
//copy c++_shared to same dir where to a.out
//run(adb,'push c++_shared.so /data/local/tmp/c++_shared.so')
let shellcmd=[];
shellcmd.push("cd /data/local/tmp")
//in case -static-libstdc++ not used uncomment next line;
// shellcmd.push("export LD_LIBRARY_PATH=.")
shellcmd.push("chmod +x a.out")
shellcmd.push("./a.out")
// a.out excution result
let output=run(runners.adb,`shell "${shellcmd.join("&&")}"`)
lg(output)
//++++++++++utilis++++++++++
function lg(...args){
console.log(...args)
}
function run(cmd,args){
if(args) cmd= cmd+" "+args.join(" ");
return require('child_process').execSync(cmd);
}
function wfs(p,data){
require("fs").writeFileSync(p,data)
}
就我而言,我必須使用“armv7a-linux-androideabiXX-clang”進行編譯,然后就可以了。 XX 必須更換為 API 版本。
在我的 windows 系統上,clang 二進制文件和腳本位於文件夾“D:\AndroidSdk\ndk\21.1.6352462\toolchains\llvm\prebuilt\windows-x86_64\bin”中
可以使用的最新腳本是“armv7a-linux-androideabi29-clang++.cmd”,就我而言,它可以編譯 C 源代碼以在三星 A3 手機上運行。
我認為這是因為這不是 64 位 kernel 並且我在 Eugene Sh 在對這個問題的評論中問我之后發現了這一點(如果他添加了答案,那么我會接受它)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.