- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试在 Raspberry PI ARM 机器上运行为 Android(在 .apk 中找到)编译的 ARM 共享对象二进制文件。
不幸的是,二进制文件是封闭源代码,我无法为运行在 raspberry pi(raspian、debian 派生)上的操作系统重新编译它
小问题:是否可以在树莓派上运行这样一个为 android 编译的 .so?我在这里上传了二进制文件:http://www.speedyshare.com/MSXq9/libfoo.so (下载不便请见谅)。
我在这里发现了这个类似的问题 Running ARM binaries for Android on Linux ARM它表明二进制文件不会在其他 unix 发行版上运行(我在我的树莓派上使用 debian、raspian 的派生版本),因为 android 的 c 库是仿生的。
可以在 debian 上安装 bionic 吗?我怎样才能设法运行这个库?
以下所有输出都是在 rasbperry 机器上生成的,我想运行/加载 libfoo.so。
当我尝试在 python 中加载 .so 文件时(之前,我相应地设置了 LD_PRELOAD)
import ctypes
import os
path = os.path.dirname(os.path.realpath(__file__))
print ctypes.cdll.LoadLibrary('libfoo.so')
我得到一个 OSError:libfoo.so:无法打开共享对象文件:没有这样的文件或目录。
但在查看 strace 输出后,加载程序似乎无法加载 libfoo.so,因此失败并显示略带误导性的错误消息 No such file or directory(在找到所有 .so 之后加载程序尝试加载它,但加载失败)。
发出 readelf -h libfoo.so 时,我得到了
root@raspberrypi:/home/pi# readelf -h libfoo.so
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: DYN (Shared object file)
Machine: ARM
Version: 0x1
Entry point address: 0x10b60
Start of program headers: 52 (bytes into file)
Start of section headers: 341440 (bytes into file)
Flags: 0x5000002, has entry point, Version5 EABI
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 5
Size of section headers: 40 (bytes)
Number of section headers: 21
Section header string table index: 20
此外,libfoo.so 的属性部分 aeabi(通过 readelf --all 获得)
No version information found in this file.
Attribute Section: aeabi
File Attributes
Tag_CPU_name: "5TE"
Tag_CPU_arch: v5TE
Tag_ARM_ISA_use: Yes
Tag_THUMB_ISA_use: Thumb-1
Tag_ABI_PCS_wchar_t: 4
Tag_ABI_FP_denormal: Needed
Tag_ABI_FP_exceptions: Needed
Tag_ABI_FP_number_model: IEEE 754
Tag_ABI_align_needed: 8-byte
Tag_ABI_align_preserved: 8-byte, except leaf SP
Tag_ABI_enum_size: int
相比之下,在我尝试运行 libfoo.so 的树莓派平台上,本地编译的 .so 的输出与上面相同:
Attribute Section: aeabi
File Attributes
Tag_CPU_name: "6"
Tag_CPU_arch: v6
Tag_ARM_ISA_use: Yes
Tag_THUMB_ISA_use: Thumb-1
Tag_FP_arch: VFPv2
Tag_ABI_PCS_wchar_t: 4
Tag_ABI_FP_denormal: Needed
Tag_ABI_FP_exceptions: Needed
Tag_ABI_FP_number_model: IEEE 754
Tag_ABI_align_needed: 8-byte
Tag_ABI_align_preserved: 8-byte, except leaf SP
Tag_ABI_enum_size: int
Tag_ABI_HardFP_use: SP and DP
Tag_ABI_VFP_args: VFP registers
Tag_ABI_optimization_goals: Aggressive Speed
Tag_DIV_use: Not allowed
编译共享库的 CPU 存在一些差异,但我认为这无关紧要,因为 ARM 架构向下兼容。
此处的 strace 输出用于尝试加载 libfoo.so:
root@raspberrypi:/home/pi# strace ./test -s libfoo.so
execve("./test", ["./test", "-s", "libfoo.so"], [/* 19 vars */]) = 0
brk(0) = 0x36f000
uname({sys="Linux", node="raspberrypi", ...}) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f6a000
access("/etc/ld.so.preload", R_OK) = 0
open("/etc/ld.so.preload", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=44, ...}) = 0
mmap2(NULL, 44, PROT_READ|PROT_WRITE, MAP_PRIVATE, 3, 0) = 0xb6f69000
close(3) = 0
open("/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\270\4\0\0004\0\0\0"..., 512) = 512
lseek(3, 7276, SEEK_SET) = 7276
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1080) = 1080
lseek(3, 7001, SEEK_SET) = 7001
read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 47) = 47
fstat64(3, {st_mode=S_IFREG|0755, st_size=10170, ...}) = 0
mmap2(NULL, 39740, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6f3e000
mprotect(0xb6f40000, 28672, PROT_NONE) = 0
mmap2(0xb6f47000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1) = 0xb6f47000
close(3) = 0
munmap(0xb6f69000, 44) = 0
open("/usr/lib/tls/v6l/vfp/libdl.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls/v6l/vfp", 0xbea66f20) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/v6l/libdl.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls/v6l", 0xbea66f20) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/vfp/libdl.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls/vfp", 0xbea66f20) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/libdl.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls", 0xbea66f20) = -1 ENOENT (No such file or directory)
open("/usr/lib/v6l/vfp/libdl.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/v6l/vfp", 0xbea66f20) = -1 ENOENT (No such file or directory)
open("/usr/lib/v6l/libdl.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/v6l", 0xbea66f20) = -1 ENOENT (No such file or directory)
open("/usr/lib/vfp/libdl.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/vfp", 0xbea66f20) = -1 ENOENT (No such file or directory)
open("/usr/lib/libdl.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib", {st_mode=S_IFDIR|0755, st_size=12288, ...}) = 0
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=43090, ...}) = 0
mmap2(NULL, 43090, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb6f33000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/libdl.so.2", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0(\t\0\0004\0\0\0"..., 512) = 512
lseek(3, 8652, SEEK_SET) = 8652
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1160) = 1160
lseek(3, 8320, SEEK_SET) = 8320
read(3, "A0\0\0\0aeabi\0\1&\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 49) = 49
fstat64(3, {st_mode=S_IFREG|0644, st_size=9812, ...}) = 0
mmap2(NULL, 41136, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6f28000
mprotect(0xb6f2a000, 28672, PROT_NONE) = 0
mmap2(0xb6f31000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1) = 0xb6f31000
close(3) = 0
open("/usr/lib/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\214y\1\0004\0\0\0"..., 512) = 512
lseek(3, 1198880, SEEK_SET) = 1198880
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1360) = 1360
lseek(3, 1198444, SEEK_SET) = 1198444
read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 47) = 47
fstat64(3, {st_mode=S_IFREG|0755, st_size=1200240, ...}) = 0
mmap2(NULL, 1242408, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6df8000
mprotect(0xb6f1b000, 28672, PROT_NONE) = 0
mmap2(0xb6f22000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x122) = 0xb6f22000
mmap2(0xb6f25000, 9512, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6f25000
close(3) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f69000
set_tls(0xb6f694c0, 0xb6f69b98, 0xb6f6e048, 0xb6f694c0, 0xb6f6e048) = 0
mprotect(0xb6f22000, 8192, PROT_READ) = 0
mprotect(0xb6f31000, 4096, PROT_READ) = 0
mprotect(0xb6f6d000, 4096, PROT_READ) = 0
munmap(0xb6f33000, 43090) = 0
open("/usr/lib/libfoo.so", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0`\v\1\0004\0\0\0"..., 512) = 512
lseek(3, 341440, SEEK_SET) = 341440
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 840) = 840
lseek(3, 341224, SEEK_SET) = 341224
read(3, "A(\0\0\0aeabi\0\1\36\0\0\0\0055TE\0\6\4\10\1\t\1\22\4\24\1\25"..., 41) = 41
close(3) = 0
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=43090, ...}) = 0
mmap2(NULL, 43090, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb6f33000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/tls/v6l/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/arm-linux-gnueabihf/tls/v6l/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/tls/v6l/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/arm-linux-gnueabihf/tls/v6l", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/tls/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/arm-linux-gnueabihf/tls/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/tls/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/arm-linux-gnueabihf/tls", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/v6l/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/arm-linux-gnueabihf/v6l/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/v6l/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/arm-linux-gnueabihf/v6l", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/arm-linux-gnueabihf/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/arm-linux-gnueabihf", {st_mode=S_IFDIR|0755, st_size=12288, ...}) = 0
open("/usr/lib/arm-linux-gnueabihf/tls/v6l/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/arm-linux-gnueabihf/tls/v6l/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/usr/lib/arm-linux-gnueabihf/tls/v6l/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/arm-linux-gnueabihf/tls/v6l", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/usr/lib/arm-linux-gnueabihf/tls/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/arm-linux-gnueabihf/tls/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/usr/lib/arm-linux-gnueabihf/tls/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/arm-linux-gnueabihf/tls", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/usr/lib/arm-linux-gnueabihf/v6l/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/arm-linux-gnueabihf/v6l/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/usr/lib/arm-linux-gnueabihf/v6l/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/arm-linux-gnueabihf/v6l", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/usr/lib/arm-linux-gnueabihf/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/arm-linux-gnueabihf/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/usr/lib/arm-linux-gnueabihf/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/arm-linux-gnueabihf", {st_mode=S_IFDIR|0755, st_size=28672, ...}) = 0
open("/lib/tls/v6l/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/tls/v6l/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/tls/v6l/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/tls/v6l", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/tls/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/tls/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/tls/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/tls", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/v6l/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/v6l/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/v6l/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/v6l", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/usr/lib/libfoo.so", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0`\v\1\0004\0\0\0"..., 512) = 512
lseek(3, 341440, SEEK_SET) = 341440
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 840) = 840
lseek(3, 341224, SEEK_SET) = 341224
read(3, "A(\0\0\0aeabi\0\1\36\0\0\0\0055TE\0\6\4\10\1\t\1\22\4\24\1\25"..., 41) = 41
close(3) = 0
brk(0) = 0x36f000
brk(0x390000) = 0x390000
munmap(0xb6f33000, 43090) = 0
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 1), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f68000
write(1, "Service libfoo.so Not Fo"..., 115Service libfoo.so Not Found: libfoo.so: cannot open shared object file: No such file or directory
) = 115
write(1, "Problem calling generic_function"..., 91Problem calling generic_function_entry(): ./test: undefined symbol: generic_function_entry
) = 91
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
Segmentation fault
最佳答案
libhybris可以在 Glibc 系统中使用基于仿生的硬件适配。从概念上讲,libhybris 是 Bionic 链接器的自定义版本,其钩子(Hook)将 Bionic 符号替换为与 Glibc 兼容的符号。它提供了 android_dlopen
、android_dlsym
来使用来自 glibc 的 Android 原生库。
关于android - 无法在 Raspberry Pi 上打开共享库 (so),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25727517/
我有一个运行 Raspbian 的 Raspberry Pi 1。我尝试在 Raspberry Pi 3 上运行 SD 卡,但它没有启动。 我已经阅读了有关升级 Raspberry Pi 2 安装以在
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我目前正在尝试RadiusNetworks发布的Raspberry Pi iBeacon教程,网址为 http://developer.radiusnetworks.com/2013/10/09/ho
我的公司使用 Raspberry Pi 3 作为产品中的嵌入式 Controller 。用户不会优雅地关闭它,他们只是扳动一个开关。为避免损坏,/boot 和/root 文件系统是只读的。这似乎是防弹
如何使用 Raspberry Pi 作为 b/w USB Tethered 手机和路由器的桥接器,使用“以太网电缆 b/w Raspberry Pi 和路由器”和“USB 电缆 b/w 手机和 Ras
我关注了一个名为Creating an Electron Application for the Raspberry Pi的博客,内容涉及使用Buster OS在Raspberry Pi中启动Elec
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
我有一个树莓派,并且已经从 raspbmc.com 加载了最新的独立版本。在使用 XBMC 时,我看到 CPU 使用率始终在 90% 以上。查看 XBMC wiki 和常见问题解答后,脏区域似乎是减少
我现在正在做一个小项目。我希望 python 脚本在登录到 GUI 后自动运行。 我按照这里的步骤操作:https://www.raspberrypi.org/forums/view ... 91&t
我正在使用 Android Things 在 Raspberry Pi 上构建应用程序并且我有 7 inch touch screen ,但屏幕永远不会关闭。 是否可以像 Android 手机一样设置
我正在执行一组事件以确保 Redis 在一组嵌入式系统(包括 Raspberry PI)中运行良好。为了修复执行未对齐内存访问的 Redis 的某些代码路径(由于 Redis 3.2 中引入的更改),
我正在尝试使用 Tanuki Java Service Wrapper。 我使用的硬件是带有 Raspbian wheezy 发行版的 Raspberry Pi。 (见 http://www.rasp
我希望构建一个以全屏模式在 Raspberry Pi 上运行的应用程序。我已经尝试过 JavaFX 和基于 Swing 的应用程序,但性能非常糟糕。 在我开始使用 SDL( http://www.li
我的项目在/home/pi/app中 以npm start开头 启动操作系统后如何启动应用程序? ****西类牙文 Mi proyecto esta zh/home/pi/app Arranca la
我正在尝试安装 Kappelt gBridge在 Raspberry Pi 3 B 型上,使用本指南:https://doc.gbridge.io/selfHosted/hostItYourself.
我正在使用我的 Pi 作为文件服务器,最近当我登录时,我看到一条错误消息,指出 libarmmem.so(无法打开共享对象文件),尽管有一些建议运行 apt-get update + 升级它并没有带来
我正在尝试使用 Raspberry# 库通过 Raspberry PI 上的 GPIO 引脚(打开和关闭)执行基本任务。根据 github 上的示例:https://github.com/raspbe
如标题所述,我在将一些用户空间中断代码从另一个 armv7 嵌入式 linux 平台移植到 Raspberry Pi 2 Model B 时遇到问题。 我知道 wiringPi 库(并让它以这种方式工
我正在尝试为 Raspberry Pi B+ 交叉编译 Tensorflow-Lite。为此,我正在关注 these instructions来自官方网站,它们是: git clone https:/
我正在尝试使用 PulseAudio RTP 将音频从 Linux Mint 桌面流式传输到运行 LibreELEC (Kodi) 的 RaspberryPi 3B。我可以使用 RTP 多播成功地流式
我是一名优秀的程序员,十分优秀!