Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在android上使用ctypes加载共享库_Python_Android_Linux_Ctypes_Buildozer - Fatal编程技术网

Python 在android上使用ctypes加载共享库

Python 在android上使用ctypes加载共享库,python,android,linux,ctypes,buildozer,Python,Android,Linux,Ctypes,Buildozer,我目前正在将一个使用音频的python应用程序移植到android上。该应用程序最初在linux上运行,并使用libportaudio.so作为其音频库。在python中,我使用ctypes加载库,并使用buildozer创建apk 这位优秀的绅士创建了一个libportaudio.so,它是为ARM编译的,可以在这里找到: 我试过他的一些示例程序,所以我知道他的库可以在我的手机上运行;但是,我还没有看到有人将它与python和ctypes一起使用 当我尝试在python程序中加载库时,问题出现

我目前正在将一个使用音频的python应用程序移植到android上。该应用程序最初在linux上运行,并使用libportaudio.so作为其音频库。在python中,我使用ctypes加载库,并使用buildozer创建apk

这位优秀的绅士创建了一个libportaudio.so,它是为ARM编译的,可以在这里找到: 我试过他的一些示例程序,所以我知道他的库可以在我的手机上运行;但是,我还没有看到有人将它与python和ctypes一起使用

当我尝试在python程序中加载库时,问题出现了,如下所示:
ctypes.cdll.LoadLibrary('libportaudio.so')
我得到以下错误:

09-28 18:52:31.345 20495 20727 I python  :  Traceback (most recent call last):
09-28 18:52:31.345 20495 20727 I python  :    File "/home/robo1340/Desktop/projectx/.buildozer/android/app/main.py", line 99, in <module>
09-28 18:52:31.345 20495 20727 I python  :    File "/home/robo1340/Desktop/projectx/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/python3/armeabi-v7a__ndk_target_21/python3/Lib/ctypes/__init__.py", line 452, in LoadLibrary
09-28 18:52:31.346 20495 20727 I python  :    File "/home/robo1340/Desktop/projectx/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/python3/armeabi-v7a__ndk_target_21/python3/Lib/ctypes/__init__.py", line 374, in __init__
09-28 18:52:31.346 20495 20727 I python  :  OSError: dlopen failed: library "libportaudio.so" not found
09-28 18:52:31.346 20495 20727 I python  : Python for android ended.

似乎在ctypes库本身的某个地方,它试图加载另一个共享库,但找不到它。这就是我失去创意的地方。buildozer.spec文件中有我遗漏的东西吗?或者我需要找到这个libgnustl_shared.so库并手动将其添加到我的项目中吗?这样在android上使用ctypes是否可行?

看来我可能已经解决了自己的问题。我找到了一个为ARM编译的libgnustl_shared.so版本,并首先加载它,如下所示:cwd=os.path.dirname(os.path.abspath(_file_))ctypes.CDLL(os.path.join(cwd,'libgnustl_shared.so'))ctypes.CDLL(os.path.join(cwd,'libportaudio.so'))我还找到了一种更好的方法来指定绝对路径。在那之后,一切都或多或少地按照预期加载和工作。我不知道为什么,但当我能得到一个机会时,我会幸运地休息一下。看来我可能已经解决了我自己的问题。我找到了一个为ARM编译的libgnustl_shared.so版本,并首先加载它,如下所示:cwd=os.path.dirname(os.path.abspath(_file_))ctypes.CDLL(os.path.join(cwd,'libgnustl_shared.so'))ctypes.CDLL(os.path.join(cwd,'libportaudio.so'))我还找到了一种更好的方法来指定绝对路径。在那之后,一切都或多或少地按照预期加载和工作。但我不知道为什么,我会在有机会的时候休息一下。
09-28 18:57:56.988 21267 21532 I python  :  Traceback (most recent call last):
09-28 18:57:56.988 21267 21532 I python  :    File "/home/robo1340/Desktop/projectx/.buildozer/android/app/main.py", line 97, in <module>
09-28 18:57:56.988 21267 21532 I python  :    File "/home/robo1340/Desktop/projectx/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/python3/armeabi-v7a__ndk_target_21/python3/Lib/ctypes/__init__.py", line 452, in LoadLibrary
09-28 18:57:56.989 21267 21532 I python  :    File "/home/robo1340/Desktop/projectx/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/python3/armeabi-v7a__ndk_target_21/python3/Lib/ctypes/__init__.py", line 374, in __init__
09-28 18:57:56.989 21267 21532 I python  :  OSError: dlopen failed: library "libgnustl_shared.so" not found
09-28 18:57:56.989 21267 21532 I python  : Python for android ended.