android NDK 交叉編譯

來源:互聯網
上載者:User

android中介軟體開發,本來利用NDK就直接產生了一個SO檔案,然後直接打包到APK裡,即可運行,但是由於一般真機是不帶有root許可權的,即使SSH可以解決root許可權,當到了java層,root許可權又失效了。經常碰到operation not permitted 或 permission delied 之類的錯誤,但目前還有一個可以運行在真機上的C編譯器,因為手機的資源畢竟是很有限的,可喜的是android-NDK給我們提供了這個交叉編譯環境,只是產生SO檔案的時候,把裡面的細節全部省掉了。不過還是保留了許多中間過程的開發HTML文檔。下面說說具體的實現過程:

1,下載NDK,並配合NDK環境變數為NDK的安裝路徑

2,根據NDK裡docs文檔裡的standalone-toolchain.html來抽取交叉編譯的環境。

3,配置SYSROOT環境變數:  SYSROOT=$NDK/platforms/android-8/arch-arm //android-8是你的android開發版本所定
4,然後運行命令:

     $NDK/build/tools/make-standalone-toolchain.sh --platform=android-5 --install-dir=/tmp/my-android-toolchain

     /tmp/my-android-toolchain是你交叉編譯環境的複製路徑。最好別放在tmp目錄裡,因為重啟機子就立即消失了。這個新產生的檔案 夾即是你的交叉編譯環境

5,配置PAHT和CC環境變數:

    export PATH=/tmp/my-android-toolchain/bin:$PATH
    export CC=arm-linux-androideabi-gcc
    如果需要長久有效,在/etc/profile裡加上PATH=/..../bin:$PATH

                                                            export PATH

   其他的類似處理。

6,把你要需要編譯的C檔案放在以上產生的編譯環境的bin目錄下,例如:/tmp/my-android-toolchain/bin,進入這個目錄裡,輸入命令: $CC -o  hello hello.c (這相當於我們平時的gcc命令,只是這裡需要引用arm裡的庫,而不是X86裡的庫)

hello.c:

 #include<string.h>

 #include<stdio.h>
 int main()

 {

printf("hello,toolchain!/n");

return 0;

 }

 

即產生了可在手機arm裡啟動並執行可執行檔hello

7,把這個可執行檔hello放到手機裡的/data/目錄下,方法有很多,這裡介紹兩種:

    一、把這個檔案放在電腦的某個目錄下,然後進入DOS的這個目錄下,運行如下命令:adb push hello /data/

    二、放在SDCARD目錄下,然後執行cp /sdcard/hello /data/也可以

8,進入/data/目錄下,運行這個hello檔案,例如“./hello”,即可以在adb shell裡看到列印結果: hello,toolchain!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.