方法&&教程:qpython中调用外部库(.so文件)里的函数
qpython吧
全部回复
仅看楼主
level 5
KnIfER 楼主
蝼蚁们,快来膜拜哥哥呀。
这贴发过一次,系统当时没删,应该是后来某个**一样的人删的。别让我发现是谁。
。
《方法&&教程:qpython中调用外部库(.so文件)里的函数》
参见链接一,根据该官方文档,无论是在windows还是在linux平台,python都提供了调用外部库(dlls or shared libraries)的模块——ctypes。那么在qpython中应该也能。但是有一个大坑:参见链接二 ,结合实践可见直接加载sd卡(无论外置内置)上的库文件是不可以的,会报错:permission denied;原因应该是sd卡上的文件没有执行权限。解决方法是将库文件复制到qpython app的私有空间里面:/data/user/0/org.qpython.qpy/;app的私有空间有执行权限。未root的手机,无法用文件管理器查看或写入该目录,所以我们要在qpython上用python脚本进行文件操作。将库文件复制到私有空间,就可以加载并执行其中的函数了。python官方案例里面调用了libc.time(None)函数,python脚本里面千万不要漏了None,否则会返回天杀的segmentation error。
/
/
/
/
/
好了,说了那么多,你要做的其实相当简单:复制以下代码保存为dl.py,并下载libcom_googlecode_android_scripting_Exec.so复制到你的存储卡上。qpython里面执行dl.py即可。
from ctypes import *
frompath="/storage/emulated/0/libcom_googlecode_android_scripting_Exec.so"
topath="/data/user/0/org.qpython.qpy/files/lib/libffmpeg.so"
import os
os.system('cp '+frompath+' '+topath)
dl=CDLL(topath)
print dl.time(None)
结果如图。
那一串数字14993....应该就是系统现在的时间码了。
ps.库文件libcom_googlecode_android_scripting_Exec.so由qpython自身解包得到,看名字应该就是官网例子里面的libc.so,看结果无误,哈哈哈机智的我。
2017年07月07日 12点07分 1
level 5
KnIfER 楼主
链接一:docs.python.org/2/library/ctypes.html#module-ctypes
链接二:https://segmentfault.com/a/1190000004062899
2017年07月07日 12点07分 2
.jxhxndjlvdkd
2023年06月20日 12点06分
level 5
KnIfER 楼主
2017年07月07日 12点07分 3
level 5
KnIfER 楼主
插错图了,重来。。
2017年07月07日 12点07分 4
level 5
KnIfER 楼主
有机会用这个办法调用libffmpeg.so,嘿嘿嘿
2017年07月07日 14点07分 5
level 11
2017年07月08日 02点07分 6
1