java.lang.UnsatisfiedLinkError:dlopen失败:找不到库“/Users/...”

2024-03-04

我想添加另一个库android-ndk hello-libs https://github.com/googlesamples/android-ndk/issues/364例子。

In CMakeLists.txt, I add:

# this is from the hello-libs sample code
add_library(lib_gperf SHARED IMPORTED)
set_target_properties(lib_gperf PROPERTIES IMPORTED_LOCATION
        ${distribution_DIR}/gperf/lib/${ANDROID_ABI}/libgperf.so)

########## I add this after the sample code:  ###########
add_library(lib_py SHARED IMPORTED)
set_target_properties(lib_py PROPERTIES IMPORTED_LOCATION
        ${distribution_DIR}/gperf/lib/${ANDROID_ABI}/libpython.so)

和这个:

target_link_libraries(
        hello-libs
        android
        lib_gperf

        #### this line ######
        lib_py

        log)

并复制libpython.so在目录中libgperf.so位于:

还将 python 头文件复制到 include 目录中:

当我单击运行按钮时:

java.lang.UnsatisfiedLinkError: dlopen failed: library "/Users/finn/Downloads/hello-libs/app/src/main/cpp/../../../../distribution/gperf/lib/arm64-v8a/libpython.so" not found
        at java.lang.Runtime.loadLibrary0(Runtime.java:1016)
        at java.lang.System.loadLibrary(System.java:1657)
        at com.example.hellolibs.MainActivity.<clinit>(MainActivity.java:36)
        at java.lang.Class.newInstance(Native Method)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1174)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2747)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2931)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1620)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:173)
        at android.app.ActivityThread.main(ActivityThread.java:6698)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:782)

该路径存在于我的电脑中,但为什么apk使用我的电脑路径,而不是android设备路径?

我使用Android设备文件资源管理器,lib位于目录中:

那么如何让apk使用正确的路径呢?

或者我错过了一些需要补充的东西?


我遇到了完全相同的问题,我发现构建 .so 文件时,python 库的库链接是错误的,而 gperf 库的链接是正常的。
python 库的链接错误 https://i.stack.imgur.com/uPSK0.png
这两个库都是在 cmake 中使用完全相同的方法导入的,因此没有意义。
我的朋友告诉我这是忍者的一个错误,他们为我提供了一个“周转”解决方案。您必须导入 python 库,就像它是 Android-NDK 提供的库一样(例如 Android 或 Log)。

该库应放入 NDK 库中,该库应位于<NDK PATH>/toolchains/llvm/prebuilt/<OS_related_folder>/sysroot/usr/lib/<ABI targeted>/<minSdkVersion/

Where:
- NDK path是 NDK 文件夹的位置。
- OS_related_folder是 os_named 文件夹(在我的例子中是 windows-x86_64)。
- ABItarget 是编译库所针对的 ABI(arm-linux-androideabi、aarch64-linux-android 等)。
- minSdkVersion是项目的最低 SDK 版本号。
该信息是从CMakeCache.txt,在文件夹“\app.cxx\cmake\debug\\”中。使用find_library进行日志时,显示库的路径

Change CMakeLists.txt仅提供库包含,并通过其名称直接链接库(python2.7 for libpython2.7.so)

cmake_minimum_required(VERSION 3.4.1)

add_library( native-lib SHARED native-lib.cpp)

include_directories( ${CMAKE_CURRENT_LIST_DIR}/../../../libs/python/include/ )

find_library( log-lib log ) # Optional

target_link_libraries( native-lib python2.7 ${log-lib} )

由于 Android 本身不提供 python 库,因此您需要通过更改 jnLibs 文件夹将其打包到 APK(请参阅文档 https://developer.android.com/studio/projects/gradle-external-native-builds#jniLibs)

按照这些步骤应该可以解决问题.so 文件中生成的库链接 https://i.stack.imgur.com/T7qZu.png

显然,这不是一个好的解决方案。我希望我的回答能引起人们对这个问题的更多关注,并且有人会提供真正的解决方案来避免此类调整

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.lang.UnsatisfiedLinkError:dlopen失败:找不到库“/Users/...” 的相关文章

  • 检查 WebView 元素时的 UiAutomator 错误

    I have recently started automation testing in android and was using UiAutomator tool for inspecting UI elements Surprisi
  • Cheesesquare:enterAlways 会产生错误的布局

    Adding enterAlways到 Cheesesquare 演示的滚动标志
  • Android Studio:XML 布局中的“包装在容器中”

    编辑 XML 布局文件时 Eclipse 有一项称为 包裹在容器中 的功能 重新格式化 gt Android gt 可让您选择一个或多个视图并在其周围包裹您选择的布局 Android Studio中有类似的东西吗 目前正在实施中 问题 69
  • 按下按钮时应用不同的样式

    有没有办法在按下按钮时将样式应用于按钮 如果我有一种风格样式 xml
  • 如何使用 Google Maps for Android V2 处理地图移动结束?

    我想在地图中心更改后立即对地址进行地理编码 如何使用新的 Android 版 Google 地图 V2 处理地图移动 我说的是用户用手指拖动地图的情况 查看新的地图 API Override public void onMapReady G
  • 将现有 VARCHAR 列与 Room 结合使用

    我正在尝试将现有的数据库与 Android Room 一起使用 但是 我的一个表有一个 VARCHAR 列 Room 似乎只支持 TEXT 不支持 VARCHAR 而且 sqlite 不允许修改列类型 那么 有没有办法使用Room中现有的带
  • 以编程方式将文本颜色设置为主要 Android 文本视图

    如何设置我的文本颜色TextView to android textColorPrimary以编程方式 我已经尝试了下面的代码 但它将 textColorPrimary 和 textColorPrimary Inverse 的文本颜色始终设
  • 当它的父级是 ConstraintLayout 时设计 CardView 吗?

    我在编辑包含Relativelayout的Cardview内的RelativeLayout时搞砸了 ConstraintLayout会将相对布局的wrap content更改为0并添加工具 layout editor absoluteX 1
  • 在 android 中建立与 MySQL 的池连接

    我需要从我的 Android 应用程序访问 MySQL 数据库 现在所有的工作都通过 DriverManager getConnection url 等等 但我必须从多个线程访问数据库 所以我必须使用连接池 问题1 是 com mysql
  • 图像作为电子邮件附件

    我想构建一个应用程序 我可以在电子邮件中附加图像 打开图像并将其设置为我的壁纸 我想让它跨平台 所以你能告诉我是否可以使用phonegap 或者我是否必须为iphone和android构建一个本机应用程序 您好 如果您只想通过电子邮件附加图
  • Android - AudioRecord类不读取数据,audioData和fftArray返回零

    我是 Android 新手 一直在开发音调分析器应用程序 最低 SDK 8 我读了很多关于如何实现 Audiorecord 类的文章 但我想知道为什么它在我录制时不读取任何数据 我尝试显示 audioData 和 fftArray 的值 但
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • Android 2.3 模拟器在更新位置时崩溃

    我正在使用 Eclipse 编写和调试 Android 应用程序 我需要做的事情之一是更新设备的位置 因此我尝试使用模拟器控制窗口中的位置控制面板 在 手动 选项卡上 我选择 十进制 输入有效的纬度和经度 然后单击 发送 不幸的是 接下来发
  • Android Studio 缓慢的增量构建

    我已经完成了许多步骤来完善我们的构建系统 those https stackoverflow com questions 16775197 building and running app via gradle and android st
  • Android 中的处理程序与异步调用

    目前我正在使用处理程序来调用 Web 服务方法以使其在后台运行 问题是它需要更多的时间来给出响应 在性能方面似乎更昂贵 现在我计划使用异步调用 哪一个是最好的 Android 中的处理程序和异步调用有什么区别 请帮我想出一个最好的解决方案
  • 问题:为什么React Native Video不能全屏播放视频?

    我正在react native 0 57 7 中为android和ios创建一个应用程序并使用反应本机视频 https github com react native community react native video播放上传到的视频
  • Dagger 2 中“HasFragmentInjector”的实际用法是什么

    我之前已经实现了 dagger2 v2 2 但现在他们也添加了 dagger android 部分 所以我正在用它创建示例项目 我知道旧的方法论 Provide and Modules and 成分等注释 但从 Dagger 2 8 开始
  • Git 实验分支还是单独的实验存储库?

    我正在开发一个 Android 应用程序 并且在整个开发周期中一直使用 Git 现在 我想构建并发布实验性功能 供人们尝试和安装 同时仍将原始的 稳定的应用程序安装在他们的设备上 现在 这意味着我需要使用不同的包名称 这会更改开发项目中的一
  • 有没有任何代码可以在android中设置壁纸而无需裁剪和缩放?

    我正在创建一个画廊应用程序 我的第一个应用程序 这是我的代码 Bitmap bmd BitmapFactory decodeStream is try getApplicationContext setWallpaper bmd catch

随机推荐

  • Android 上的 HttpURLConnection 失败

    已解决 请参阅下面的评论 我有一个实现分段文件上传的类 该代码适用于我尝试过的每个 Java 客户端 Android 除外 并且它是我的 Android 应用程序中唯一不能与我的后端服务很好地配合的 HTTP 请求代码 连接响应代码是 1
  • 调试无法与 Android Studio 一起使用的 C++/本机库模块(使用 Cmake)

    我在调试库模块的 C 文件时遇到问题 这在一般情况下可能吗 如果应用程序项目包含 C 代码 则调试工作正常 但我想将 C 代码移至库模块 启动会话时出现错误消息 现在启动本机调试会话 注意力 未找到符号目录 请检查您的本机调试配置 我的 l
  • 不同功能的样本数量不同

    plot x 3 x 2 5 x 12 是否可以设置x 3只有 2 个样本并且x 2 5 x 12比如说同一个图中有 1000 个样本 这是可以做到的 但不是开箱即用的 第一个变体使用临时文件来保存一个低采样率的函数 并稍后将其与高分辨率函
  • Android Studio - 未找到 SDK - 设置向导失败 - 防火墙代理

    言归正传 我处于公司防火墙后面 我必须手动下载 Android Studio 的 zip 文件 并将其提取到我的计算机上的程序文件 Windows 10 中 当我启动工作室时 我的对话工作室需要检索 SDK 我尝试这样做 但在这 3 个 z
  • 如何在 iOS 上制作爆炸动画?

    我有一款 iOS 游戏 当球击中目标时就会爆炸 动画爆炸的最佳方式是什么 如果您正在寻找简单的东西 制作一系列动画爆炸的图像 将它们添加到 UIImageView 并启动动画 像这样的事情 UIImage image0 UIImage im
  • SoapUI:如何将指纹作为 SecurityTokenReference 添加到 wss SIGNATURE 条目

    我有一个关于soapUI的问题 我正在尝试将 ws security 标头添加到包含签名的肥皂请求中 为此 我在项目首选项中使用了soapUI 对话框 WS Security Configurations 它按预期工作 但我的服务器应用程序
  • 如何验证 AWS SigV4 签名

    我有一个服务器将接收带有 SigV4 授权标头的请求 并且基于 SigV4 的验证 我将授予数据访问权限 我们如何验证SigV4 我一直在尝试获取用于验证 SigV4 的文档 但无法获取它 有什么办法可以反编译签名并检查身份验证然后授权吗
  • 使用 PHP 正则表达式从字符串中删除换行符

    如何使用 PHP 从字符串中删除换行符 string str replace PHP EOL string or string str replace array n r string
  • 通过 PostMessage 发送/接收字符串

    尽管网上已经有一些资源可以解决这个粗略的主题 但我仍然没有找到适合我的答案 我希望我的同事之间能有充分的沟通VB net过程和我的C 过程 我希望能够发送一个字符串到and来自C 过程 但目前我需要实现 Sending一个字符串到C 处理并
  • MongoDB 交易

    我在 C 中有如下方法 private void Save object mongoCollection Save object someotherRelationaldb Save object 我有两个数据库 我必须在其中保存一个对象
  • 使用 VBA 访问 iframe 内的元素

    我正在尝试使用 PowerPoint VBA 访问使用 Wix Site Builder 制作的网页上的 iframe 元素 我尝试了在谷歌和其他网页上找到的所有内容 但我无法弄清楚 当我尝试使用时 最常见的错误是 自动化错误 conten
  • 如何使用TextureView代替SurfaceView与ExoPlayer的PlayerView一起使用?

    我知道可以在 ExoPlayer 中使用TextureView 但我找不到任何有关如何以正确的方式实现此功能的示例 你能帮我解决这个问题吗 The PlayerView有一个 xml 属性surface type让您选择是否要使用Surfa
  • 在 XML 中意味着什么?

    什么是
  • 如何在 Eclipse 模拟器中创建代表 Samsung Galaxy S 的 AVD?

    我正在开发一款专门针对三星 Galaxy S 的应用程序 我不是在这里做出决定的人 他们希望其布局达到像素精度 我可以只使用普通的 2 1 AVD 吗 所以我尝试创建 WQVGA432 但它看起来像这样 我不知道为什么 LinearLayo
  • 构建参数未解决

    我有 docker compose 和以下代码 version 3 8 services php container name php build context php args PHPVERSION 7 4 XDEBUGVERSION
  • 如何触发/强制更新 Svelte 组件

    我正在尝试了解 svelte 3 反应性的事情 我想在单击按钮时强制刷新用户界面 我正在使用自定义组件AsyncFetcher接受 HTTP post 数据并返回data其插槽的对象 http post 结果 我想要一个禁用功能 因此 当单
  • HttpWebRequest 和本机 GZip 压缩

    当请求使用 Gzip 压缩的页面时 我收到很多以下错误 System IO InvalidDataException GZip 页脚中的 CRC 与 根据解压后计算出的CRC 数据 我正在使用本机 GZipStream 来解压缩 并正在考虑
  • 在虚拟 getter 中添加参数

    我想做的是这样的 Schema virtual getSomething get function what if what return this somethingElse else return this something what
  • Laravel 5 - 写入供应商目录

    Laravel 5 在工作一段时间后崩溃了 这是错误 file put contents Library WebServer Documents project vendor services json 无法打开流 权限被拒绝 在 File
  • java.lang.UnsatisfiedLinkError:dlopen失败:找不到库“/Users/...”

    我想添加另一个库android ndk hello libs https github com googlesamples android ndk issues 364例子 In CMakeLists txt I add this is f