android - 无法加载库 soinfo_relocate(linker.cpp :975): cannot locate symbol "log2f" referenced by "libvlfeat.so"

标签 android c++ gcc android-ndk

我正在开发一个以原生 C 为核心处理的 Android 应用程序。我使用 NDKr10 从 native 代码构建库并取得成功。但是当我尝试加载库时,会显示错误:

无法加载库 soinfo_relocate(linker.cpp:975):无法找到“libvlfeat.so”引用的符号“log2f”...

我发现一些资源说这个错误是由 gcc 编译器和 Android 目标版本引起的,但我不确定。(我的目标 SDK 是 21)。

更新:我的应用在 api 21 设备上运行良好,但较低版本显示错误。

有人知道这个问题吗?请给我一个解决方案来解决这个问题。

谢谢。

最佳答案

您必须按照解决它们之间依赖关系的顺序加载 .so 库。也就是说,您必须对加载顺序进行硬编码。

关于Android.mk的一些知识可以找here , herehere . (但如果您的项目编译成功,您的 Android.mk 可能会正常工作。)

有一个陷阱,libs/armeabilibs/armeabi-v7a 中的 .so 库没有合并。也就是说,如果您仅在 armeabi 版本中有一些预编译库,则为 armeabi-v7a 编译库是没有用的(因为预编译的 armeabi 库将找不到)。

关于android - 无法加载库 soinfo_relocate(linker.cpp :975): cannot locate symbol "log2f" referenced by "libvlfeat.so",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32327268/

相关文章:

c - 在 GNU C 内联汇编中与推送/分配/弹出交换?

c - 用于为索尼阅读器 prs900 编译/交叉编译 gcc 的 binutils

c - Makefile - 通配符和配方构建

java - 如果我在数据库中将时间存储为 ServerValue.TIMESTAMP,如何从 FirebaseFirestore 检索 RecyclerView 中的日期和时间

php - 如何从数据库mysql中获取总数据表并在android中显示

java - 如何将字节数组中的pcm样本转换为-1.0到1.0范围内的 float 并返回?

android - 将数据写入不适合的 NFC 标签

c++ - 无法推断重载函数的模板参数

C++11 线程卡在锁定互斥锁上

c++ - 在 gmock 的 EXPECT_CALL 中调用 sleep()