當前位置:編程學習大全網 - 編程語言 - 如何使用自己的makefile編譯android ndk項目

如何使用自己的makefile編譯android ndk項目

其實android ndk上的編譯說到底也就是交叉編譯,只要配置好交叉編譯工具鏈,使用原有的makefile也是可以編譯出在android運行的c、c++程序的。以android-ndk-r4-crystax的ndk版本為例:編譯器路徑 android-ndk-r4-crystax/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin名稱前綴 arm-eabi-頭文件目錄 android-ndk-r4-crystax/build/platforms/android-3/arch-arm/usr/include庫文件目錄 android-ndk-r4-crystax/build/platforms/android-3/arch-arm/usr/lib妳可以試壹下上面的配置,如果編譯鏈接都沒有問題,可以adb push到android設備上運行看看,什麽結果?有點崩潰,根本運行不起來,妳也許想試試看android自帶的ndk例子,確實是能夠運行的,問題在哪兒呢?只是正確配置了編譯器、頭文件、庫文件還不夠,還需要配置編譯、鏈接的參數,android例子中編譯鏈接的參數是什麽呢?妳也許想深究壹下android的makefile,可是不久妳會發現那是更崩潰的事情,裏面用了很多的make腳本函數。其實android的makefile是可以把執行的詳細命令輸出來的,只要make的時候加上V=1即可。可以看到確實帶了很多參數編譯參數:-fpic -mthumb-interwork -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -Wa,--noexecstack -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -DANDROID 鏈接參數:-nostdlib -Bdynamic -Wl,-dynamic-linker,/system/bin/linker -Wl,--gc-sections -Wl,-z,nocopyreloc -Wl,--no-undefined -Wl,-z,noexecstack -L$(PLATFORM_LIBRARY_DIRECTORYS) crtbegin_static.o crtend_android.o 這其中鏈接參數中的-Wl,-dynamic-linker,/system/bin/linker、crtbegin_static.o、crtend_android.o是最關鍵的,android使用了自己的進程加載器,並且自定義了c運行時的啟動結束。難怪先前編譯的進程啟動不了。

  • 上一篇:買iPad可以做些什麽?是什麽驅使妳去買它?
  • 下一篇:小米note降頻在哪
  • copyright 2024編程學習大全網