小虾米资讯

AD1
当前位置:网站首页 / android / 正文

android:方法&&教程 win10使用ndk交叉编译hello

2020-10-22 14:40:36 / 我要吐槽 查看是否已被百度收录 查看是否已被谷歌收录 查看是否已被搜狗收录 查看是否已被360收录
AD2
用ndk编译用于安卓上运行的库hello_world.so.prerequisites:1.安装好android-ndk-r12b或者其他版本,安装有android sdk2.安装好MinGW与配件msysndkmsys从网盘分享下载解压得hello_world.cpp、makefile两个文件度盘1o7PIsAI密码g7dn其中hello_world.cpp:#include <iostream> int main(int argc,char *argv[]){ for (int i=0;i<argc;i++) printf("argv[%d]=%s\n",i,argv[i]); return 0;}是个回显命令行参数的简单程序。配置makefile:用notepad++打开,将其中的NDK_ROOT变量值改成你自己的ndk根路径。android SDK根目录变量PLATFROM_ROOT如是。#makefile for hello_worldNDK_ROOT=F:/COD/NVPACK/android-ndk-r12bTOOLCHAINS_ROOT=$(NDK_ROOT)/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64TOOLCHAINS_PREFIX=$(TOOLCHAINS_ROOT)/bin/arm-linux-androideabiTOOLCHAINS_INCLUDE=$(TOOLCHAINS_ROOT)/lib/gcc/arm-linux-androideabi/4.9.x/include-fixedPLATFROM_ROOT=$(NDK_ROOT)/platforms/android-23/arch-armPLATFROM_INCLUDE=$(PLATFROM_ROOT)/usr/includePLATFROM_LIB=$(PLATFROM_ROOT)/usr/libMODALE_NAME=hello_worldRM=delFLAGSMY=-I$(TOOLCHAINS_INCLUDE)\-I$(PLATFROM_INCLUDE)\-I$(NDK_ROOT)/sources/cxx-stl/stlport/stlport/ \-L$(PLATFROM_LIB)\-l$(NDK_ROOT)/sources/cxx-stl/stlport/libs/armeabi/libstlport_static.a\-nostdlib\-lgcc\-Bdynamic\-lc\-shared OBJS=$(MODALE_NAME).o\$(PLATFROM_LIB)/crtbegin_dynamic.o\$(PLATFROM_LIB)/crtend_android.o all:$(TOOLCHAINS_PREFIX)-gcc $(FLAGSMY) $(MODALE_NAME).cpp -o $(MODALE_NAME).soclean:$(RM) *.o注意makefile的tab就是tab而不能是4个空格编译:双击打开msys.bat,cd 至hello_world.cpp、makefile所在目录,比如F:/video_wrkst/ndkTry/huixianmake完成!附gcc编译出.exe指令:g++ hello_world.cpp -o hello_world.exe -std=c++1y联类不穷~

说起联类不穷,教你在c4droid上编译出等价的hello_world.so等等,掏手机……

MSYS2官网挂了,新的工具链:win10+ubuntu子系统+ndk-llvm-clangmakefile:BASE_PATH := $(call my-dir)_ARCH_PX_ := aarch64_TARGETRI_ := aarch64-linux-android_ARCH_CC_ := $(_TARGETRI_)21-clangCC := $(TOOLCHAIN)/bin/$(_ARCH_CC_AR := $(TOOLCHAIN)/bin/aarch64-linux-android-ar.exeAR := $(TOOLCHAIN)/aarch64-linux-android/bin/arAPP_STL:=stlport_staticFLAGSMY=\-std=c++11 \-arch aarch64 \-pie -fPIE \all: helloworld.cpp $(CC) $(FLAGSMY) $(<) -o helloworld.sobuild.sh:export ANDROID_SDK=/mnt/d/Code/NVPACK/android_sdkexport PATH=$ANDROID_SDK/platform-tools:$PATHexport PATH=$ANDROID_SDK/tools:$PATHexport NDK=/mnt/d/Code/NVPACK/android-ndk-r21bexport NDK=/mnt/d/Code/NVPACK/android_sdk/ndk/21.0.6113669export PATH=$NDK:$PATHexport TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64export TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/windows-x86_64export SYSROOT=$TOOLCHAIN/sysrootexport ASM=$SYSROOT/usr/include/$PLATFORMmake方法:win10中安装ubuntu子系统、ndk21(linux 或 window 的版本都可以)安装 bandizip, 可以在文件夹空白处右击打开命令行。在源码目录打开命令行,运行./build.sh进行编译。测试:(TERMUX)科上网,安装TERMUX,等待数分钟。将helloworld.so复制到/sdcard/Android/data/com.termux在Termux运行测试命令:cp /sdcard/Android/data/com.termux/helloworld.so hw.so && chmod 777 hw.so && ./hw.so测试:(QPYTHON)参考之前的《qpython调用c语言代码之传参》。

Powered By © 小虾米资讯 2015

(本站部分文章来源于网络或网友爆料,不代表本站观点,如有侵权请联系及时删除 )