2017-08-11 193 views
1

我正在寫一個C++代碼來執行android設備中的「top」命令。這是我使用的代碼。在Android設備上運行C++程序

using namespace std; 

int main() 
{  
    char buffer[1024]; 
    string result; 
    system("top -n 1 | head -n 4 | tail -n 3"); 
    FILE *memcpu= popen("top -n 1 | head -n 4 | tail -n 3","r"); 
     while (!feof(memcpu)) { 
      if (fgets(buffer, 1024, memcpu) != NULL) 
       result+=buffer; 
     } 
     cout<<"result you need\n"<<result; 
} 

我想在adb設備中運行此文件。因此,我用命令

arm-linux-gnueabi-g++ -static -march=armv7-a name.cpp -o test 

構建程序當我運行該程序,該字符串結果是空的。

我通過在程序中包含system("top -n 1");行來測試該程序。但是我沒有從adb shell獲得任何輸出(空字符串)。

我使用g ++編譯相同的程序,並在linux pc中運行。那時我正在得到正確的輸出。什麼可能是我沒有得到所需的android設備的adb外殼輸出的原因?

+0

你是用'JNI'還是其他方式運行這個'C++'代碼? – Sma

+0

我不使用JNI。基本上我只是建立這個程序到設備兼容的可執行文件,並使用'adb push'命令將此可執行文件放到system/bin文件夾中。然後我進入adb shell並從'bin'執行程序。 – deepz

+0

您的測試設備上是否有3個程序(頂部,頭部和尾部)? –

回答

0

當你建立一個使用命令

arm-linux-gnueabi-g++ -static -march=armv7-a name.cpp -o test 

創建靜態二進制程序。爲了鏈接android中的庫,該程序必須使用android ndk build構建。這解決了我的問題。

相關問題