python on android 4 -numpy

下载numpy-1.22.4
修改setup.py
找到
import numpy.distutils.command.sdist                                      
import setuptools 

修改为

#import numpy.distutils.command.sdist                                      
import setuptools    
import numpy.distutils.command.sdist
from numpy.distutils.core import numpy_cmdclass  

然后可能需要修改一下前面提到的env.sh 或者自己临时性的设置CFLAGS="-lm"一样也可以的.然后安装
 

python3 setup.py install

本来准备opencv了,但是在这之前,我们还需要cmake,前面从termux拷贝过cmake.但是只有root 权限才能使用,主要是termux的cmake中有硬编码的@termux@/bin/sh调用,这在android中需要termux的私有帐户。所以我们需要先自己搞个cmake.

主要的内容来源于:https://github.com/termux/termux-packages/blob/master/packages/cmake/build.sh

有两处都是sh的问题Source/cmLocalUnixMakefileGenerator3.cxx

和Source/cmExecProgramCommand.cxx 

有一处是交叉编译的问题Modules/Platform/Android-GNU.cmake 在前文栏目中都有patch

另一个问题不知道是不是我个人的问题,检测abi会失败,所以我硬编码改成了arm64-v8a

文件: Modules/Platform/Android-GNU.cmake

找到

include(Platform/Android/abi-${CMAKE_ANDROID_ARCH_ABI}-GNU)

硬性指定

include(Platform/Android/abi-arm64-v8a-GNU)

这样cmake的源码就修改完成了

然后准备在termux的cmake中再造一个cmake自己用,因为命令行太长,在手机中输入太难,手机打开termux会进入cmake源码目录,创建build子目录并进入

然后主机命令行输入好长好长(假设adb已经连接并只连接了一个机器)

adb shell input text $(echo "cmake -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=28 -DSPHINX_MAN=OFF -DCMAKE_MAN_DIR=share/man -DCMAKE_DOC_DIR=share/doc/cmake -DCMAKE_USE_SYSTEM_CURL=ON -DCMAKE_USE_SYSTEM_EXPAT=ON -DCMAKE_USE_SYSTEM_FORM=ON -DCMAKE_USE_SYSTEM_JSONCPP=ON -DCMAKE_USE_SYSTEM_LIBARCHIVE=ON -DCMAKE_USE_SYSTEM_LIBRHASH=ON -DCMAKE_USE_SYSTEM_LIBUV=ON -DCMAKE_USE_SYSTEM_ZLIB=ON -DBUILD_CursesDialog=ON  .." | sed -e 's/ /\%s/g')

然后手机上回车,执行。等待。这个我手机慢,要十分钟左右

然后继续在termux中执行cmake --build .

完成后在build/bin下会生成cmake等文件。就是我们需要的内容了,

然后回到adb shell 

我拷贝bin到$HOME/python3/usr/bin下了。还有个问题是modules.拷贝到$HOME/usr/share/cmake-3.28下了

修改我们前面的env.sh,添加两个环境变量

export CMAKE_ROOT=$HOME/python3/cmake-3.28
export CMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake

然后开始测试cmake,找个目录,建立一个main.cpp,内容为hello world

#include <iostream>

int main(int argc, char** argv){
        std::cout << "Hello World" << std::endl;
        return 0;
}

建立一个CMakeLists.txt,内容如下

project(HelloWorld)
SET(CMAKE_CXX_FLAGS "-fPIC -Wall -Wno-unused-function -Wno-unused-parameter -std=c++11 ")
add_executable(hello_world main.cpp)

然后测试

mkdir build
cd build 
cmake ..
make
./hello_world

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值