小编Rus*_*ken的帖子

将具有特定版本的本机 .so 库包含到 Android .aar 存档中

在我看来,gradle Android 插件没有将版本化的 .so 库包含到 .aar 存档中。

我的情况:我需要在需要另一个库的 Android 应用程序中加载一些库: libz.so.1

我确实有libz.solibz.so.1在我的本机库目录中。

运行 gradle 后libz.so,创建的 .aar 存档中只有库。java.lang.UnsatisfiedLinkError: dlopen failed: library "libz.so.1" not found当我尝试运行我的应用程序时,它会导致异常。

看起来我otherlibrary只尝试加载特定版本的 libz。

readelf -d otherlibrary.so 还告诉我它想要特定的库: 0x00000001 (NEEDED) Shared library: [libz.so.1]

我要加载的两个库都是第三方库。看起来我需要为以下其中一项找到一种方法:

  • 打包libz.so.1到 .aar 存档中,因此otherlibrary.so可以轻松与之链接
  • 加载libz.so并以某种方式otherlibrary.so与它链接

但我的想法不多了,该怎么做。

构建 .aar 存档的 build.gradle 的一部分:

sourceSets {
    main {
        jniLibs.srcDirs = ['libs']
    }
}
Run Code Online (Sandbox Code Playgroud)

libs目录包含libz.solibs.so.1库。只有libz.so汇编成.aar …

android shared-libraries android-ndk android-gradle-plugin

7
推荐指数
0
解决办法
740
查看次数

O_DIRECT 未声明、Eclipse CDT、Ubuntu 20.04

我遇到 O_DIRECT 问题。我尝试将它与 一起使用open(),但出现如下错误:

error: O_DIRECT undeclared (first use in this function)
Run Code Online (Sandbox Code Playgroud)

我包括<fcntl.h>

我搜索了/usr/include/目录O_DIRECT,它存在于x86_64-linux-gnu/bits/fcntl-linux.h. 我尝试包含此文件,但随后出现此错误:

error: #error Never use <x86_64-linux-gnu/bits/fcntl-linux.h> directly; include <fcntl.h> instead.
Run Code Online (Sandbox Code Playgroud)

我正在新安装的 Ubuntu 20.04 系统上的 Eclipse CDT 项目中尝试所有这些。

c linux ubuntu eclipse-cdt

4
推荐指数
1
解决办法
4098
查看次数