簡體   English   中英

如何為 Android 編譯和運行一個簡單的 C 代碼?

[英]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: 沒有這樣的文件或目錄”

我究竟做錯了什么?

您可以使用此 nodejs 腳本自動構建和測試 android 的 c/c++ 程序

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM