【问题标题】:Why can't I use the pre-built library from AndroidNDK on rapsberrypi4?为什么我不能在 rapsberrypi4 上使用 AndroidNDK 的预构建库?
【发布时间】:2021-12-13 16:17:10
【问题描述】:

也许我做错了,但我没有学到其他东西。最重要的是,我决定构建一个程序,将libOpenSLES.so(来自 AndroidNDK 的库)本地链接到 raspberrypi4。

我在树莓派上的操作系统:Debian Bullseye armhf。

uname -ar

Linux Guardian 5.10.52-v7l + # 1441 SMP Tue Aug 3 18:11:56 BST 2021 armv7l GNU / Linux

为此,我将 Android NDK 中的库和头文件直接复制到我的环境中。

ls /usr/include/SLES

OpenSLES.h OpenSLES_AndroidConfiguration.h OpenSLES_Platform.h
OpenSLES_Android.h OpenSLES_AndroidMetadata.h

file /usr/lib/libOpenSLES.so

/usr/lib/libOpenSLES.so: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID [md5 / uuid] = ee43a7abfd4e7dd27b03b0c97b80b768, with debug_info, not stripped
The description is the same for all other libraries in the system.

使用链接键 -lOpenSLES 构建的程序没有错误,但在启动时加载此库时出错

E: [pulseaudio] ltdl-bind-now.c: 无法打开模块 /home/pulseaudio-android/testbuild/src/.libs/module-opensles.so: libOpenSLES.so: 无法打开共享对象文件:没有这样的文件或目录

同时,ldd 无法正常运行

ldd /usr/lib/libOpenSLES.so 不是动态可执行文件

我为AndroidNDK 中提供的所有库尝试了ldd

find ./android-ndk-r23b -name libOpenSLES.so | grep androideabi | xargs ldd

./android-ndk-r23b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/26/libOpenSLES.so:
not a dynamic executable

./android-ndk-r23b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/29/libOpenSLES.so:
not a dynamic executable

./android-ndk-r23b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/31/libOpenSLES.so:
not a dynamic executable

./android-ndk-r23b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/27/libOpenSLES.so:
not a dynamic executable

./android-ndk-r23b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/24/libOpenSLES.so:
not a dynamic executable

./android-ndk-r23b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/18/libOpenSLES.so:
not a dynamic executable

./android-ndk-r23b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/19/libOpenSLES.so:
not a dynamic executable

./android-ndk-r23b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/23/libOpenSLES.so:
not a dynamic executable

./android-ndk-r23b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/28/libOpenSLES.so:
not a dynamic executable

./android-ndk-r23b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/22/libOpenSLES.so:
not a dynamic executable

./android-ndk-r23b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/16/libOpenSLES.so:
not a dynamic executable

./android-ndk-r23b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/21/libOpenSLES.so:
not a dynamic executable

./android-ndk-r23b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/30/libOpenSLES.so:
not a dynamic executable

./android-ndk-r23b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/arm-linux-androideabi/17/libOpenSLES.so:

感谢您的帮助。

【问题讨论】:

    标签: c++ c linux android-ndk


    【解决方案1】:

    抱歉,问题已解决。 Android NDK 提供仅用于链接的存根库,它们不包含任何执行代码。 真正的库带有真正的 Android 设备。

    谢谢。

    【讨论】:

      猜你喜欢
      • 2011-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多