# ConvolutionPlayground **Repository Path**: lx0095/ConvolutionPlayground ## Basic Information - **Project Name**: ConvolutionPlayground - **Description**: 移动设备上的卷积加速(代码疏于维护,学习原理为主) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 3 - **Created**: 2020-05-20 - **Last Updated**: 2023-01-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README $$ 快速在Android上运行C程序 $$ NDK鼓捣了两个小时,觉得非常不优雅,虽然Android的abi有很大不同,但在类UNIX系统上跑个C程序有这么难吗? 感谢3ms上的大神教会我这个方法,首先安装交叉编译器 ```shell sudo apt install gcc-aarch64-linux-gnu gcc-arm-linux-gnueabi ``` 然后恭喜你搞定了编译环境 确认下sysroot安装在了哪,我的是默认装在了/usr/aarch64-linux-gnu和/usr/arm-linux-gnueabi 然后我们编个Armv8的C程序 ``` shell aarch64-linux-gnu-gcc --static --sysroot="/usr/aarch64-linux-gnu" test.c -o test ``` 推到手机上 ```shell adb -s XXX push test /data/lcoal ``` 接着adb shell进去运行即可 出现指令不支持的时候注意下编译选项,比如麒麟920上 ```shell arm-linux-gnueabi-gcc --static --sysroot="/usr/arm-linux-gnueabi" test.c -o test -mcpu=cortex-a15 -mfpu=neon -mfloat-abi=softfp ``` note: 如果你想在armv7a使用hard float,那么你可能需要装arm-linux-gnueabihf-gcc。但根据[*google*](http://android.googlesource.com/platform/ndk/+/master/docs/HardFloatAbi.md)所言,armv7a上并没有真正实现hard float abi,而是在你启用-mfloat-abi=hard选项时,将float类型参数使用浮点寄存器而非整数寄存器传递,这会节省一些function call的convert成本(注意自己的写的短函数会被内联),但害处更多(我也不清楚是啥,google大佬说有就是有),所以ndk删除了armv7a的硬浮点支持,我们也就不要轻易尝试用hard float编译器了。