无法将 .so 库从工作项目集成到另一个项目

Posted

技术标签:

【中文标题】无法将 .so 库从工作项目集成到另一个项目【英文标题】:Can not integrate .so library from working project to another one 【发布时间】:2013-11-28 18:06:23 【问题描述】:

我有一个工作项目,我使用JNI 调用来自C 库的方法。

我的项目结构:

以及加载库的代码:

static 
    System.loadLibrary("RemoveBackground");

效果很好。但是直到我尝试将此功能集成到其他项目中。我复制了jnilibs 文件夹。还有所有three classes 没有RemoveBackgroundActivity(测试活动)。当我编译这个项目时,我有一个例外:

1663-1663/com.example.Activities E/dalvikvm﹕ The lib may be ARM... trying to load it [/data/data/com.example.Activities/lib/libRemoveBackground.so] using houdini
1663-1663/com.example.Activities E/dalvikvm﹕ dvmHoudiniDlopen returns 0x9833cf40 with bool=1

你知道如何解决这个问题或其他方法吗?

【问题讨论】:

1) 我不确定IDEA,但在Eclipse 中,您必须在项目中启用本机开发。您不能只复制目录。 2)我怀疑你需要 libs 目录,除非你正在链接其他库。我的一部分认为它正在尝试加载在另一个项目中构建的库。 3) Application.mk 中有什么?通常没有必要。 4) 除非您明确注册本机方法,否则 JNI 调用可能需要更新,因为包名称(不过,这可能是未来的问题)。 【参考方案1】:

我想您尝试使用的 RemoveBackground.so 本机库不是为 ARM 架构构建的。我不确定 Linux,但在 Mac OS X 上,您可以使用 lipo 命令检查本机库的支持架构。例如:

lipo -info /usr/lib/RemoveBackground.so

【讨论】:

以上是关于无法将 .so 库从工作项目集成到另一个项目的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse:将 git 存储库从项目重定位到工作区

将 Xcode 项目集成到另一个项目中

PMP第一章:引论

iPhone:使用 *.m 和 *.h 文件从 1 个项目复制到另一个项目时,Nib 文件无法正常工作

将 BigQuery 项目克隆到另一个帐户

将存储库从VSTS帐户克隆到不同的TFS帐户,并执行提取以进行更新